-5
package Calculadora;
import java.util.InputMismatchException;
import java.util.Scanner;
public class calculadora {
public static void main(String[] args) {
float valor1 = 0;
float valor2 = 0;
float opcao = 5;
float resultado;
//boolean loop = true;
System.out.println("-Seja bem-vindo(a) a sua calculadora-");
System.out.println("Escolha uma o por favor!!");
System.out.println("1. Soma");
System.out.println("2. Subtracao");
System.out.println("3. Multiplicacao");
System.out.println("4. Divisao");
System.out.println("0. Sair");
System.out.println("Operação: ");
Scanner teclado = new Scanner(System.in);
opcao = teclado.nextFloat();
clearBuffet(teclado);
while (opcao != 0) {
if (opcao == 1) {
System.out.print("Digite o primeiro valor: ");
clearBuffet(teclado);
try {
valor1 = teclado.nextFloat();
clearBuffet(teclado);
} catch (InputMismatchException e) {
System.out.print("Vamos começar denovo, digite apenas números\n\n");
clearBuffet(teclado);
continue;
}
}
System.out.print("Digite o segundo valor: ");
try {
valor2 = teclado.nextFloat();
clearBuffet(teclado);
break;
} catch (InputMismatchException e) {
System.out.print("Vamos começar denovo, digite apenas números\n\n");
clearBuffet(teclado);
continue;
}
}
resultado = valor1 + valor2;
System.out.println(resultado);
while (opcao != 0) {
if (opcao == 2) {
System.out.print("Digite o primeiro valor: ");
clearBuffet(teclado);
try {
valor1 = teclado.nextFloat();
clearBuffet(teclado);
} catch (InputMismatchException e) {
System.out.print("Vamos começar denovo, digite apenas números\n\n");
clearBuffet(teclado);
continue;
}
System.out.print("Digite o segundo valor: ");
clearBuffet(teclado);
try {
valor2 = teclado.nextFloat();
clearBuffet(teclado);
break;
} catch (InputMismatchException e) {
System.out.print("Vamos começar denovo, digite apenas números\n\n");
clearBuffet(teclado);
continue;
}
}
}
resultado = valor1 - valor2;
System.out.print(resultado);
while (opcao != 0) {
if (opcao == 3) {
System.out.print("Digite o primeiro valor: ");
clearBuffet(teclado);
try {
valor1 = teclado.nextFloat();
} catch (InputMismatchException e) {
System.out.print("Vamos começar denovo, digite apenas números\n\n");
clearBuffet(teclado);
continue;
}
System.out.print("Digite o segundo valor: ");
clearBuffet(teclado);
try {
valor2 = teclado.nextFloat();
break;
} catch (InputMismatchException e) {
System.out.print("Vamos começar denovo, digite apenas números\n\n");
clearBuffet(teclado);
continue;
}
}
}
resultado = valor1 * valor2;
System.out.print(resultado);
while (opcao != 0) {
if (opcao == 4) {
if (opcao == 1) {
System.out.print("Digite o primeiro valor: ");
clearBuffet(teclado);
try {
valor1 = teclado.nextFloat();
} catch (InputMismatchException e) {
System.out.print("Vamos começar denovo, digite apenas números\n\n");
clearBuffet(teclado);
continue;
}
System.out.print("Digite o segundo valor: ");
clearBuffet(teclado);
try {
valor2 = teclado.nextFloat();
break;
} catch (InputMismatchException e) {
System.out.print("Vamos começar denovo, digite apenas números\n\n");
clearBuffet(teclado);
continue;
}
}
} else if (valor2 == 0) {
System.out.println("Impossivel dividir por 0!!");
} else resultado = valor1 / valor2;
System.out.print(resultado);
if (opcao >= 5) {
System.out.println("Opção invalida");
}
}
}
private static void clearBuffet(Scanner scanner) {
// TODO Auto-generated method stub
if (scanner.hasNextLine()) {
scanner.nextLine();
}
}
}
This answers your question? Why Scanner Returns Error on Something That’s Within the Expected?
– hkotsubo
Just to state that the statement of the answer below, that a method must have at most 15 lines, is mistaken and absurd. Anyone who tries to define a "magic" number of lines that is "right" for all cases is automatically wrong, because it depends a lot on the context. To learn more about the subject, I suggest you read here and here
– hkotsubo
Just to leave a suggestion instead of trying to clean the buffer (it’s not bufft), you can simply read the whole line and try to convert it to number, like this: https://ideone.com/XNOA0p. (to read from the keyboard it is better to understand the reasons by reading the link already quoted). Also note that I deleted this unnecessary loop pile, and it only does the operation that was chosen in the menu (in addition the answer below suggests creating the
Scanner
every hour within the methodlerOpcao
, which is unnecessary). Anyway, I could improve more, but in general lines would be this.– hkotsubo