RatingSistemaElo.java
Publicado por Edson G. de Lima (śltima atualizaēćo em 07/05/2012)
[ Hits: 3.633 ]
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
Algoritmo para Gerar um Sudoku NxN vįlido
Calcula as chances de se ganhar na mega-sena.
Diferenca entre meses - um método de busca simples
Pesquisa Ternįria em um vetor ordenado
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
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes nćo usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
estou com chromebook legalzinho. (2)
Estou com sede em aprender sobre o nosso querido Linux. (1)
big linux sem audio como resolver (2)
Como faz para dar um update-grub por shell script [RESOLVIDO] (3)
[Python] Automaēćo de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas ąs imagens de uma pasta