Laço de Repetição While

Bom dia. Alguém poderia me ajudar? Tenho um laço de repetição while no código para verificar se o número digitado é 1, 2 ou 3, caso contrário entra no laço, e apresenta a mensagem de opção, até que seja digitado a opção correta, porém ele só entende a primeiro condição, a outra ignorada. Segue o código abaixo:

System.out.println("Escolha o nível de dificuldade 1, 2  3:");
Scanner nDificuldade = new Scanner(System.in);
int nivel = nDificuldade.nextInt();
//iount opcao = nivel;
while((nivel != 1 && nivel != 2) && nivel != 3)){
  System.out.println("Opção inválida, escolha a dificuldade 1, 2 ou 3:");
  nivel = nDificuldade.nextInt();
}

Outra dúvida: como eu faço pra chamar um método, e repetir ele quantas vezes quiser juntamente com outro, por exemplo.:sem fazer essa repetição de código abaixo, chama um de cada vez, mas sem ser desse jeito que está. Segue o código a abaixo:

if(nivel == 1){
JogadorHumano(tab);

JogadorComputadorA(tab);

JogadorHumano(tab);

JogadorComputadorA(tab);

    JogadorHumano(tab);
   
    JogadorComputadorA(tab);
   
    JogadorHumano(tab);
   
    JogadorComputadorA(tab);
   
    JogadorHumano(tab);
    }

Remova os parentes a mais que você colocou!

while(nivel != 1 && nivel != 2 && nivel != 3){
      System.out.println("Opção inválida, escolha a dificuldade 1, 2 ou 3:");
      nivel = nDificuldade.nextInt();
}

Colocar em um for ou while não resolveria?

1 curtida
while(nivel < 1 || nivel > 3){
  System.out.println("Opção inválida, escolha a dificuldade 1, 2 ou 3:");
  nivel = nDificuldade.nextInt();
}
1 curtida

Bom dia, @Jonathan_Medeiros tentei dessa forma assim também: while(nivel >= 4 || nivel == 0){
System.out.println(“Opção inválida, escolha a dificuldade 1, 2 ou 3:”);
nivel = nDificuldade.nextInt();
}
Deu certo, obrigado pela ajuda. Você pode dizer como posso resolver a outra dúvida abaixo: como eu faço pra chamar um método, e repetir ele quantas vezes quiser juntamente com outro, por exemplo.:sem fazer essa repetição de código abaixo, chama um de cada vez, mas sem ser desse jeito que está. Segue o código a abaixo:

if(nivel == 1){
JogadorHumano(tab);

JogadorComputadorA(tab);

JogadorHumano(tab);

JogadorComputadorA(tab);

    JogadorHumano(tab);
   
    JogadorComputadorA(tab);
   
    JogadorHumano(tab);
   
    JogadorComputadorA(tab);
   
    JogadorHumano(tab);
    }

Bom dia, @Jelson1 obrigado pela ajuda. Essa parte consegui resolver. Você pode tentar me orientar na outra dúvida que inseri logo abaixo

Faz um laço while novamente e chame os métodos dentro do while, só defina uma forma de parar o loop quando desejar!

por exemplo:

boolean repeteLoop = true;

while (repeteLoop) {
    /*
        Chame seus métodos
        Verifique se o usuário deseja continuar, se sim o loop executa novamente, se não altere o valor da variável para false e o loop se encerra
    */
}

Obrigado, @Jonathan_Medeiros. Vou tentar fazer algo do tipo.

Não seria mais legível fazer assim?

while (nivel < 1 || nivel > 3) {
1 curtida

Concerteza!!! É que na hora eu não me toquei. Só copie o código que foi mostrado e concertei o problema com as condições que ele agrupou de forma equivocada!

1 curtida

Boa noite, @staroski essa parte consegui resolver. Obrigado! Agora preciso implementar algo para verificar quem venceu, jogador ou computador, ou se empatou. Pode ajudar? Tentei fazer algo assim, mas não deu:

public static void VerificaVencedor(char[][] tabuleiroJogo){
  int computador = -1;
  int jogador = 1;
  if(tabuleiroJogo[0][0] == 1 && tabuleiroJogo[0][2] == 1 && tabuleiroJogo[0][4] == 1){
    System.out.println("Jogador Venceu");
  }
}
}

Boa noite, @Jonathan_Medeiros. Consegui resolver essa parte também. Obrigado! Agora preciso implementar algo para verificar quem venceu, jogador ou computador, ou se empatou. Pode ajudar? Tentei fazer algo assim, mas não deu:

public static void VerificaVencedor(char[][] tabuleiroJogo){
  int computador = -1;
  int jogador = 1;
  if(tabuleiroJogo[0][0] == 1 && tabuleiroJogo[0][2] == 1 && tabuleiroJogo[0][4] == 1){
    System.out.println("Jogador Venceu");
  }
}
}