RatingSistemaElo.java
Publicado por Edson G. de Lima (śltima atualizaēćo em 07/05/2012)
[ Hits: 3.829 ]
Download RatingSistemaElo.java
Pode ser utilizado para atualizar o rating dos participantes de um torneio de xadrez utilizando o Sistema Elo.
import java.util.Scanner; import java.lang.Math; public class RatingSistemaElo { public static void main (String args[]) { System.out.println ("\n--------------------------------------------"); System.out.println ("Cįlculo de rating de xadrez pelo Sistema Elo"); System.out.println ("--------------------------------------------\n"); double ratingAtualJogadorA = 0; double ratingAtualJogadorB = 0; double ratingNovoJogadorA = 0; double ratingNovoJogadorB = 0; double pontosObtidosJogadorA = 0; double pontosObtidosJogadorB = 0; double pontosEsperadosJogadorA = 0; double pontosEsperadosJogadorB = 0; double diferencaDePontosAB = 0; double diferencaDePontosBA = 0; Scanner leia = new Scanner (System.in); Scanner leia2 = new Scanner (System.in); System.out.println ("Digite \"0\" para sair."); System.out.println ("-----------------------"); do { System.out.println ("\nEntre com o rating atual do Jogador A: "); ratingAtualJogadorA = leia.nextDouble (); if (ratingAtualJogadorA == 0) { System.out.println ("Ok, saindo..."); System.exit (0); } System.out.println ("\nEntre com o rating atual do Jogador B: "); ratingAtualJogadorB = leia.nextDouble (); System.out.println ("\nEntre com a pontuaēćo do Jogador A (1 para vitória, 0,5 para empate e 0 para derrota): "); pontosObtidosJogadorA = leia2.nextDouble (); if (pontosObtidosJogadorA == 1) { pontosObtidosJogadorB = 0; }else if (pontosObtidosJogadorA == 0.5) { pontosObtidosJogadorB = 0.5; }else{ pontosObtidosJogadorB = 1; } // Tabela de pontos esperados: //---------------------------- // Se o rating de A for MAIOR que de B: if (ratingAtualJogadorA >= ratingAtualJogadorB) { diferencaDePontosAB = (ratingAtualJogadorA - ratingAtualJogadorB); if (diferencaDePontosAB <= 3) { pontosEsperadosJogadorA = 0.50; pontosEsperadosJogadorB = 0.50; }else if ((diferencaDePontosAB>=4) && (diferencaDePontosAB<=10)) { pontosEsperadosJogadorA = 0.51; pontosEsperadosJogadorB = 0.49; }else if ((diferencaDePontosAB>=11) && (diferencaDePontosAB<=17)) { pontosEsperadosJogadorA = 0.52; pontosEsperadosJogadorB = 0.48; }else if ((diferencaDePontosAB>=18) && (diferencaDePontosAB<=25)) { pontosEsperadosJogadorA = 0.53; pontosEsperadosJogadorB = 0.47; }else if ((diferencaDePontosAB>=26) && (diferencaDePontosAB<=32)) { pontosEsperadosJogadorA = 0.54; pontosEsperadosJogadorB = 0.46; }else if ((diferencaDePontosAB>=33) && (diferencaDePontosAB<=39)) { pontosEsperadosJogadorA = 0.55; pontosEsperadosJogadorB = 0.45; }else if ((diferencaDePontosAB>=40) && (diferencaDePontosAB<=46)) { pontosEsperadosJogadorA = 0.56; pontosEsperadosJogadorB = 0.44; }else if ((diferencaDePontosAB>=47) && (diferencaDePontosAB<=53)) { pontosEsperadosJogadorA = 0.57; pontosEsperadosJogadorB = 0.43; }else if ((diferencaDePontosAB>=54) && (diferencaDePontosAB<=61)) { pontosEsperadosJogadorA = 0.58; pontosEsperadosJogadorB = 0.42; }else if ((diferencaDePontosAB>=62) && (diferencaDePontosAB<=68)) { pontosEsperadosJogadorA = 0.59; pontosEsperadosJogadorB = 0.41; }else if ((diferencaDePontosAB>=69) && (diferencaDePontosAB<=76)) { pontosEsperadosJogadorA = 0.60; pontosEsperadosJogadorB = 0.40; }else if ((diferencaDePontosAB>=77) && (diferencaDePontosAB<=83)) { pontosEsperadosJogadorA = 0.61; pontosEsperadosJogadorB = 0.39; }else if ((diferencaDePontosAB>=84) && (diferencaDePontosAB<=91)) { pontosEsperadosJogadorA = 0.62; pontosEsperadosJogadorB = 0.38; }else if ((diferencaDePontosAB>=92) && (diferencaDePontosAB<=98)) { pontosEsperadosJogadorA = 0.63; pontosEsperadosJogadorB = 0.37; }else if ((diferencaDePontosAB>=99) && (diferencaDePontosAB<=106)) { pontosEsperadosJogadorA = 0.64; pontosEsperadosJogadorB = 0.36; }else if ((diferencaDePontosAB>=107) && (diferencaDePontosAB<=113)) { pontosEsperadosJogadorA = 0.65; pontosEsperadosJogadorB = 0.35; }else if ((diferencaDePontosAB>=114) && (diferencaDePontosAB<=121)) { pontosEsperadosJogadorA = 0.66; pontosEsperadosJogadorB = 0.34; }else if ((diferencaDePontosAB>=122) && (diferencaDePontosAB<=129)) { pontosEsperadosJogadorA = 0.67; pontosEsperadosJogadorB = 0.33; }else if ((diferencaDePontosAB>=130) && (diferencaDePontosAB<=137)) { pontosEsperadosJogadorA = 0.68; pontosEsperadosJogadorB = 0.32; }else if ((diferencaDePontosAB>=138) && (diferencaDePontosAB<=145)) { pontosEsperadosJogadorA = 0.69; pontosEsperadosJogadorB = 0.31; }else if ((diferencaDePontosAB>=146) && (diferencaDePontosAB<=153)) { pontosEsperadosJogadorA = 0.70; pontosEsperadosJogadorB = 0.30; }else if ((diferencaDePontosAB>=154) && (diferencaDePontosAB<=162)) { pontosEsperadosJogadorA = 0.71; pontosEsperadosJogadorB = 0.29; }else if ((diferencaDePontosAB>=163) && (diferencaDePontosAB<=170)) { pontosEsperadosJogadorA = 0.72; pontosEsperadosJogadorB = 0.28; }else if ((diferencaDePontosAB>=171) && (diferencaDePontosAB<=179)) { pontosEsperadosJogadorA = 0.73; pontosEsperadosJogadorB = 0.27; }else if ((diferencaDePontosAB>=180) && (diferencaDePontosAB<=188)) { pontosEsperadosJogadorA = 0.74; pontosEsperadosJogadorB = 0.26; }else if ((diferencaDePontosAB>=189) && (diferencaDePontosAB<=197)) { pontosEsperadosJogadorA = 0.75; pontosEsperadosJogadorB = 0.25; }else if ((diferencaDePontosAB>=198) && (diferencaDePontosAB<=206)) { pontosEsperadosJogadorA = 0.76; pontosEsperadosJogadorB = 0.24; }else if ((diferencaDePontosAB>=207) && (diferencaDePontosAB<=215)) { pontosEsperadosJogadorA = 0.77; pontosEsperadosJogadorB = 0.23; }else if ((diferencaDePontosAB>=216) && (diferencaDePontosAB<=225)) { pontosEsperadosJogadorA = 0.78; pontosEsperadosJogadorB = 0.22; }else if ((diferencaDePontosAB>=226) && (diferencaDePontosAB<=235)) { pontosEsperadosJogadorA = 0.79; pontosEsperadosJogadorB = 0.21; }else if ((diferencaDePontosAB>=236) && (diferencaDePontosAB<=245)) { pontosEsperadosJogadorA = 0.80; pontosEsperadosJogadorB = 0.20; }else if ((diferencaDePontosAB>=246) && (diferencaDePontosAB<=256)) { pontosEsperadosJogadorA = 0.81; pontosEsperadosJogadorB = 0.19; }else if ((diferencaDePontosAB>=257) && (diferencaDePontosAB<=267)) { pontosEsperadosJogadorA = 0.82; pontosEsperadosJogadorB = 0.18; }else if ((diferencaDePontosAB>=268) && (diferencaDePontosAB<=278)) { pontosEsperadosJogadorA = 0.83; pontosEsperadosJogadorB = 0.17; }else if ((diferencaDePontosAB>=279) && (diferencaDePontosAB<=290)) { pontosEsperadosJogadorA = 0.84; pontosEsperadosJogadorB = 0.16; }else if ((diferencaDePontosAB>=291) && (diferencaDePontosAB<=302)) { pontosEsperadosJogadorA = 0.85; pontosEsperadosJogadorB = 0.15; }else if ((diferencaDePontosAB>=303) && (diferencaDePontosAB<=315)) { pontosEsperadosJogadorA = 0.86; pontosEsperadosJogadorB = 0.14; }else if ((diferencaDePontosAB>=316) && (diferencaDePontosAB<=328)) { pontosEsperadosJogadorA = 0.87; pontosEsperadosJogadorB = 0.13; }else if ((diferencaDePontosAB>=329) && (diferencaDePontosAB<=344)) { pontosEsperadosJogadorA = 0.88; pontosEsperadosJogadorB = 0.12; }else if ((diferencaDePontosAB>=345) && (diferencaDePontosAB<=357)) { pontosEsperadosJogadorA = 0.89; pontosEsperadosJogadorB = 0.11; }else if ((diferencaDePontosAB>=358) && (diferencaDePontosAB<=374)) { pontosEsperadosJogadorA = 0.90; pontosEsperadosJogadorB = 0.10; }else if ((diferencaDePontosAB>=375) && (diferencaDePontosAB<=391)) { pontosEsperadosJogadorA = 0.91; pontosEsperadosJogadorB = 0.09; }else if ((diferencaDePontosAB>=392) && (diferencaDePontosAB<=411)) { pontosEsperadosJogadorA = 0.92; pontosEsperadosJogadorB = 0.08; }else if ((diferencaDePontosAB>=412) && (diferencaDePontosAB<=432)) { pontosEsperadosJogadorA = 0.93; pontosEsperadosJogadorB = 0.07; }else if ((diferencaDePontosAB>=433) && (diferencaDePontosAB<=456)) { pontosEsperadosJogadorA = 0.94; pontosEsperadosJogadorB = 0.06; }else if ((diferencaDePontosAB>=457) && (diferencaDePontosAB<=484)) { pontosEsperadosJogadorA = 0.95; pontosEsperadosJogadorB = 0.05; }else if ((diferencaDePontosAB>=485) && (diferencaDePontosAB<=517)) { pontosEsperadosJogadorA = 0.96; pontosEsperadosJogadorB = 0.04; }else if ((diferencaDePontosAB>=518) && (diferencaDePontosAB<=559)) { pontosEsperadosJogadorA = 0.97; pontosEsperadosJogadorB = 0.03; }else if ((diferencaDePontosAB>=560) && (diferencaDePontosAB<=619)) { pontosEsperadosJogadorA = 0.98; pontosEsperadosJogadorB = 0.02; }else if ((diferencaDePontosAB>=620) && (diferencaDePontosAB<=735)) { pontosEsperadosJogadorA = 0.99; pontosEsperadosJogadorB = 0.01; }else{ pontosEsperadosJogadorA = 1.00; pontosEsperadosJogadorB = 0.00; } // Se rating de A for MENOR que de B: }else if (ratingAtualJogadorA < ratingAtualJogadorB) { diferencaDePontosBA = (ratingAtualJogadorB - ratingAtualJogadorA); if (diferencaDePontosBA <= 3) { pontosEsperadosJogadorB = 0.50; pontosEsperadosJogadorA = 0.50; }else if ((diferencaDePontosBA>=4) && (diferencaDePontosBA<=10)) { pontosEsperadosJogadorB = 0.51; pontosEsperadosJogadorA = 0.49; }else if ((diferencaDePontosBA>=11) && (diferencaDePontosBA<=17)) { pontosEsperadosJogadorB = 0.52; pontosEsperadosJogadorA = 0.48; }else if ((diferencaDePontosBA>=18) && (diferencaDePontosBA<=25)) { pontosEsperadosJogadorB = 0.53; pontosEsperadosJogadorA = 0.47; }else if ((diferencaDePontosBA>=26) && (diferencaDePontosBA<=32)) { pontosEsperadosJogadorB = 0.54; pontosEsperadosJogadorA = 0.46; }else if ((diferencaDePontosBA>=33) && (diferencaDePontosBA<=39)) { pontosEsperadosJogadorB = 0.55; pontosEsperadosJogadorA = 0.45; }else if ((diferencaDePontosBA>=40) && (diferencaDePontosBA<=46)) { pontosEsperadosJogadorB = 0.56; pontosEsperadosJogadorA = 0.44; }else if ((diferencaDePontosBA>=47) && (diferencaDePontosBA<=53)) { pontosEsperadosJogadorB = 0.57; pontosEsperadosJogadorA = 0.43; }else if ((diferencaDePontosBA>=54) && (diferencaDePontosBA<=61)) { pontosEsperadosJogadorB = 0.58; pontosEsperadosJogadorA = 0.42; }else if ((diferencaDePontosBA>=62) && (diferencaDePontosBA<=68)) { pontosEsperadosJogadorB = 0.59; pontosEsperadosJogadorA = 0.41; }else if ((diferencaDePontosBA>=69) && (diferencaDePontosBA<=76)) { pontosEsperadosJogadorB = 0.60; pontosEsperadosJogadorA = 0.40; }else if ((diferencaDePontosBA>=77) && (diferencaDePontosBA<=83)) { pontosEsperadosJogadorB = 0.61; pontosEsperadosJogadorA = 0.39; }else if ((diferencaDePontosBA>=84) && (diferencaDePontosBA<=91)) { pontosEsperadosJogadorB = 0.62; pontosEsperadosJogadorA = 0.38; }else if ((diferencaDePontosBA>=92) && (diferencaDePontosBA<=98)) { pontosEsperadosJogadorB = 0.63; pontosEsperadosJogadorA = 0.37; }else if ((diferencaDePontosBA>=99) && (diferencaDePontosBA<=106)) { pontosEsperadosJogadorB = 0.64; pontosEsperadosJogadorA = 0.36; }else if ((diferencaDePontosBA>=107) && (diferencaDePontosBA<=113)) { pontosEsperadosJogadorB = 0.65; pontosEsperadosJogadorA = 0.35; }else if ((diferencaDePontosBA>=114) && (diferencaDePontosBA<=121)) { pontosEsperadosJogadorB = 0.66; pontosEsperadosJogadorA = 0.34; }else if ((diferencaDePontosBA>=122) && (diferencaDePontosBA<=129)) { pontosEsperadosJogadorB = 0.67; pontosEsperadosJogadorA = 0.33; }else if ((diferencaDePontosBA>=130) && (diferencaDePontosBA<=137)) { pontosEsperadosJogadorB = 0.68; pontosEsperadosJogadorA = 0.32; }else if ((diferencaDePontosBA>=138) && (diferencaDePontosBA<=145)) { pontosEsperadosJogadorB = 0.69; pontosEsperadosJogadorA = 0.31; }else if ((diferencaDePontosBA>=146) && (diferencaDePontosBA<=153)) { pontosEsperadosJogadorB = 0.70; pontosEsperadosJogadorA = 0.30; }else if ((diferencaDePontosBA>=154) && (diferencaDePontosBA<=162)) { pontosEsperadosJogadorB = 0.71; pontosEsperadosJogadorA = 0.29; }else if ((diferencaDePontosBA>=163) && (diferencaDePontosBA<=170)) { pontosEsperadosJogadorB = 0.72; pontosEsperadosJogadorA = 0.28; }else if ((diferencaDePontosBA>=171) && (diferencaDePontosBA<=179)) { pontosEsperadosJogadorB = 0.73; pontosEsperadosJogadorA = 0.27; }else if ((diferencaDePontosBA>=180) && (diferencaDePontosBA<=188)) { pontosEsperadosJogadorB = 0.74; pontosEsperadosJogadorA = 0.26; }else if ((diferencaDePontosBA>=189) && (diferencaDePontosBA<=197)) { pontosEsperadosJogadorB = 0.75; pontosEsperadosJogadorA = 0.25; }else if ((diferencaDePontosBA>=198) && (diferencaDePontosBA<=206)) { pontosEsperadosJogadorB = 0.76; pontosEsperadosJogadorA = 0.24; }else if ((diferencaDePontosBA>=207) && (diferencaDePontosBA<=215)) { pontosEsperadosJogadorB = 0.77; pontosEsperadosJogadorA = 0.23; }else if ((diferencaDePontosBA>=216) && (diferencaDePontosBA<=225)) { pontosEsperadosJogadorB = 0.78; pontosEsperadosJogadorA = 0.22; }else if ((diferencaDePontosBA>=226) && (diferencaDePontosBA<=235)) { pontosEsperadosJogadorB = 0.79; pontosEsperadosJogadorA = 0.21; }else if ((diferencaDePontosBA>=236) && (diferencaDePontosBA<=245)) { pontosEsperadosJogadorB = 0.80; pontosEsperadosJogadorA = 0.20; }else if ((diferencaDePontosBA>=246) && (diferencaDePontosBA<=256)) { pontosEsperadosJogadorB = 0.81; pontosEsperadosJogadorA = 0.19; }else if ((diferencaDePontosBA>=257) && (diferencaDePontosBA<=267)) { pontosEsperadosJogadorB = 0.82; pontosEsperadosJogadorA = 0.18; }else if ((diferencaDePontosBA>=268) && (diferencaDePontosBA<=278)) { pontosEsperadosJogadorB = 0.83; pontosEsperadosJogadorA = 0.17; }else if ((diferencaDePontosBA>=279) && (diferencaDePontosBA<=290)) { pontosEsperadosJogadorB = 0.84; pontosEsperadosJogadorA = 0.16; }else if ((diferencaDePontosBA>=291) && (diferencaDePontosBA<=302)) { pontosEsperadosJogadorB = 0.85; pontosEsperadosJogadorA = 0.15; }else if ((diferencaDePontosBA>=303) && (diferencaDePontosBA<=315)) { pontosEsperadosJogadorB = 0.86; pontosEsperadosJogadorA = 0.14; }else if ((diferencaDePontosBA>=316) && (diferencaDePontosBA<=328)) { pontosEsperadosJogadorB = 0.87; pontosEsperadosJogadorA = 0.13; }else if ((diferencaDePontosBA>=329) && (diferencaDePontosBA<=344)) { pontosEsperadosJogadorB = 0.88; pontosEsperadosJogadorA = 0.12; }else if ((diferencaDePontosBA>=345) && (diferencaDePontosBA<=357)) { pontosEsperadosJogadorB = 0.89; pontosEsperadosJogadorA = 0.11; }else if ((diferencaDePontosBA>=358) && (diferencaDePontosBA<=374)) { pontosEsperadosJogadorB = 0.90; pontosEsperadosJogadorA = 0.10; }else if ((diferencaDePontosBA>=375) && (diferencaDePontosBA<=391)) { pontosEsperadosJogadorB = 0.91; pontosEsperadosJogadorA = 0.09; }else if ((diferencaDePontosBA>=392) && (diferencaDePontosBA<=411)) { pontosEsperadosJogadorB = 0.92; pontosEsperadosJogadorA = 0.08; }else if ((diferencaDePontosBA>=412) && (diferencaDePontosBA<=432)) { pontosEsperadosJogadorB = 0.93; pontosEsperadosJogadorA = 0.07; }else if ((diferencaDePontosBA>=433) && (diferencaDePontosBA<=456)) { pontosEsperadosJogadorB = 0.94; pontosEsperadosJogadorA = 0.06; }else if ((diferencaDePontosBA>=457) && (diferencaDePontosBA<=484)) { pontosEsperadosJogadorB = 0.95; pontosEsperadosJogadorA = 0.05; }else if ((diferencaDePontosBA>=485) && (diferencaDePontosBA<=517)) { pontosEsperadosJogadorB = 0.96; pontosEsperadosJogadorA = 0.04; }else if ((diferencaDePontosBA>=518) && (diferencaDePontosBA<=559)) { pontosEsperadosJogadorB = 0.97; pontosEsperadosJogadorA = 0.03; }else if ((diferencaDePontosBA>=560) && (diferencaDePontosBA<=619)) { pontosEsperadosJogadorB = 0.98; pontosEsperadosJogadorA = 0.02; }else if ((diferencaDePontosBA>=620) && (diferencaDePontosBA<=735)) { pontosEsperadosJogadorB = 0.99; pontosEsperadosJogadorA = 0.01; }else{ pontosEsperadosJogadorB = 1.00; pontosEsperadosJogadorA = 0.00; } } // *** Fórmula *** ratingNovoJogadorA = ratingAtualJogadorA + 10 * (pontosObtidosJogadorA - pontosEsperadosJogadorA); ratingNovoJogadorB = ratingAtualJogadorB + 10 * (pontosObtidosJogadorB - pontosEsperadosJogadorB); // *************** System.out.println ("\n--------------------------------"); System.out.println (" Novo rating do Jogador A: "+(int)ratingNovoJogadorA); System.out.println ("--------------------------------"); System.out.println (" Novo rating do Jogador B: "+(int)ratingNovoJogadorB); System.out.println ("--------------------------------\n"); } while (ratingAtualJogadorA != 0); } }
Pesquisa Binaria em um vetor ordenado
Script para cįlculo de distāncias na superfķcie terrestre utilizando coordenadas geogrįficas
Ordenaēćo de vetores com letras do alfabeto
Calcula as chances de se ganhar na mega-sena.
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Proteja seu Linux Mint com o Timeshift: Restaure o sistema mesmo que ele nćo inicie!
Instalando Google Chrome no Debian 13
paginaēćo dos favoritos nćo funciona no vivaolinux[BU... (7)
Erro de interface de Rede no Virt Manager dentro Debian 13 KDE (11)