Posso bloquear opções no while?

Boa noite. Minha dúvida é a seguinte: Eu estava brincando com os códigos para testar o que to aprendendo. Tive um resultado legal, fazendo as coisas de cabeça sem consulta. Só que me bateu uma dúvida. A minha ideia foi simples, usei um “while” para dizer que enquanto eu disse que quero continuar somando o próximo número inserido seria somado ao total anterior e a tela me daria o novo valor. O que eu queria saber é se posso setar pro programa encerrar apenas se eu digitar “n”, já que digitando “y” o programa continua. Sendo assim, quanquer outra letra digitada eu queria que o programa dissesse: “Opção inválida. Digite y/n”

package estudosaleatórios;

import java.util.Scanner;

public class EstudosAleatórios {

    public static void main(String[] args) {
        Scanner t = new Scanner(System.in);
        
        int x;
        int z = 0;
        
        String Y = "y";
        String res = Y;
        
        while(res.equals(Y)){
            System.out.print("Some um número com o anterior: ");
            x=t.nextInt();
            z += x;
            System.out.println("A soma dos números digitados é: "+z);
            System.out.print("Continua? [y/n] ");
            res=t.next();
        }

    }

}

é só colocar um while dentro do outro. Logo após a opção res=t.next(); você coloca while(!res.equals(Y) && !res.equals(n)).

Na minha opinião vc só precisa um IF depois da leitura:

System.out.print("Continua? [y/n] ");
res=t.next();
if ("n".equals(res)){
   break;//vai parar seu laço.
}
1 curtida

Outra forma de implementar:

import java.io.PrintStream;
import java.util.Scanner;

public class EstudosAleatórios {

    private static final Scanner in = new Scanner(System.in);
    private static final PrintStream out = System.out;

    public static void main(String[] args) {
        try {
            EstudosAleatórios programa = new EstudosAleatórios();
            programa.executar();
        } catch (Throwable t) {
            t.printStackTrace();
        } finally {
            System.exit(0);
        }
    }

    public void executar() {
        int soma = 0;
        do {
            soma += lerInteiro("Some um número com o anterior: ");;
            escrever("A soma dos números digitados é: " + soma);
        } while (continuar());
    }

    private boolean continuar() {
        while (true) {
            switch (lerTexto("Continua? [y/n] ")) {
                case "y":
                    return true;
                case "n":
                    return false;
                default:
                    escrever("Opção inválida: \"" + opcao + "\"");
                    continue;
            }
        }
    }

    private void escrever(String mensagem) {
        out.println(mensagem);
    }

    private int lerInteiro(String mensagem) {
        return Integer.parseInt(lerTexto(mensagem));
    }

    private String lerTexto(String mensagem) {
        System.out.print(mensagem);
        return in.nextLine();
    }
}
2 curtidas

Crie um método continuar:

public static final Scanner SCANNER = new Scanner(System.in);

public static void main(String[] args) {
  do {
    System.out.println("Executou tarefa");
  } while(continuar());
    System.out.println("Fim");
}

public static boolean continuar() {
  while(true) {
    System.out.print("Continua? [y/n] ");
    res=SCANNER.next(); // acho que é SCANNER.nextLine();
    switch(res) {
      case "y":
      case "Y":
        return true;
      case "n":
      case "N":
        return false;
      default:
        System.out.println("Entrada invalida");
    }
  }
}

Caraca… vc domina bem OO heim.
eu faria da forma mais simples possivel, rsrsrs, sem objetos

Não usei OO, só segreguei sua lógica em métodos distintos e tirei tudo de dentro do main.

Bom dia, na verdade eu só faria um sistema de if no seu codigo original, acredito que é desnecessário fazer uma classe só pra isso, mas se vc conseguiu isso que importa. vlw ahaha

Muito obrigado a todos. As respostas foram esclarescedoras e com elas tive várias alternativas para resolver isso (a maior parte delas que eu ainda não tinha estudado). Muito obrigado.