Posso bloquear opções no while?

8 respostas
RSM_RLB

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();
        }

    }

}

8 Respostas

rmendes08

é 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)).

Rodrigo_Void

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.
}
staroski

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();
    }
}
D

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");
    }
  }
}
Jederson_Andre

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

staroski

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

R

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

RSM_RLB

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.

Criado 26 de setembro de 2017
Ultima resposta 26 de set. de 2017
Respostas 8
Participantes 7