RatingSistemaElo.java
Publicado por Edson G. de Lima (śltima atualizaēćo em 07/05/2012)
[ Hits: 3.961 ]
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);
}
}
Código para validar CPF e CNPJ otimizado
Exemplo de sobrecarga de métodos
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preēo do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalaēćo de aplicativos para acesso remoto ao Linux
Conky, alerta de temperatura alta (10)
Assisti Avatar 3: Fogo e Cinzas (3)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (42)









