Como fazer lógica pra diferenciar [A, B] de [B, A]

Oi galera, to precisando arrumar o item 3 desse exercício:

Simular um jogo de dados. Para cada partida, cada jogador lançará o dado uma vez, quem vence acumula um ponto e quem alcançar a maior pontuação será o vencedor.
1.Gerar um vetor de 5 jogadores.
2.Defina classe jogador com o número do jogador, o número rolado no dado e sua pontuação.
3.Cada jogador deverá jogar com todos os outros uma vez.

esse é o código que eu já fiz: jogoDado.cs · GitHub

Do jeito que está, existe a partida [jogador 0 x jogador 1] e tbm [jogador 1 x jogador 0], o que não pode acontecer. Minha dúvida é: como fazer lógica pra cada jogador, dentro do vetor de objeto, jogar só uma vez com os outros?

Vamos imaginar que você tenha 4 jogadores: J1, J2, J3 e J4.
J1 vai jogar contra J2, J3 e J4
J2 vai jogar contra J3 e J4
J3 vai jogar contra J4

Ou seja, seu problema é nesse loop:

//partidas
    for(int i=0;i<J.Length;i++){
      for(int j=0; j<J.Length; j++){
        if(J[i]!=J[j]){ //
          J[i].marcaPartida(J[i], J[j]);
        }
      }      
    }

O primeiro for no seu código representa no meu exemplo, o primeiro jogador da linha.
O segundo for representa os jogadores que vão jogar contra. Você não precisa percorrer todos jogadores novamente, só aqueles faltando. Seu for fica assim então:

//partidas
    for(int i=0;i<J.Length -1 ;i++){ // -1 porque o último jogador não vai ter mais jogos
      for(int j=i + 1; j<J.Length; j++){ // i + 1 porque você só marca jogos com o próximo
           // você não precisa mais do if, porque o for só vai considerar jogadores diferentes
          J[i].marcaPartida(J[i], J[j]);
      }      
    }

Não rodei o código mas acredito que a idéia seja essa.

2 curtidas

É exatamente isso, muito obrigada! Eu sei que é simples, mas nossa, fez meu dia.