RatingSistemaElo.java
Publicado por Edson G. de Lima (śltima atualizaēćo em 07/05/2012)
[ Hits: 3.909 ]
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);
}
}
Calcular ritmo de corrida de rua
Crivo de Eratóstenes Simples em Java
Contador de caracteres, palavras e linhas de um arquivo
Planilha de cįlculo para multa judicial
Monitorando o Preēo do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forēas
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de forēa bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Erro ao instalar programa, "vocź tem pacotes retidos quebrados&qu... (4)
VOL jį nćo é mais como antes? (15)
Como personalizar o lxde? [RESOLVIDO] (5)
Flatpaks nćo funcionam após atualizar pelo Gerenciador de Atualizaēões... (3)









