RatingSistemaElo.java
Publicado por Edson G. de Lima (śltima atualizaēćo em 07/05/2012)
[ Hits: 3.660 ]
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); } }
Avaliaēćo de expressões matemįticas
Algoritmos para Teoria dos Nśmeros
Exemplo de sobrecarga de métodos
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Tśnel SSH Reverso para Acessar Sua Mįquina Local a Partir de uma Mįquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Pśblico/Anōnimo de forma simples, rįpido e fįcil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rįpida e fįcil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (11)