fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. class Ideone
  8. {
  9. static void menu() {
  10. System.out.println("-Seja bem-vindo(a) a sua calculadora-");
  11. System.out.println("Escolha uma o por favor!!");
  12. System.out.println("1. Soma");
  13. System.out.println("2. Subtracao");
  14. System.out.println("3. Multiplicacao");
  15. System.out.println("4. Divisao");
  16. System.out.println("0. Sair");
  17. }
  18.  
  19. private static int lerNumeroInteiro(Scanner scanner, String mensagem) {
  20. while (true) { // loop infitino
  21. System.out.println(mensagem);
  22. try {
  23. // lê a linha inteira (assim não precisa limpar o buffer), e já tenta converter para inteiro
  24. // se der certo, o valor é retornado (e aí ele já sai do while)
  25. return Integer.parseInt(scanner.nextLine());
  26. } catch (NumberFormatException e) {
  27. System.out.println("Você não digitou um número");
  28. }
  29. }
  30. }
  31.  
  32. private static double lerNumeroDouble(Scanner scanner, String mensagem) {
  33. // esta versão não tem valores inválidos
  34. return lerNumeroDouble(scanner, mensagem, new double[]{}, "");
  35. }
  36.  
  37. private static double lerNumeroDouble(Scanner scanner, String mensagem, double[] valoresInvalidos, String mensagemInvalido) {
  38. while (true) { // loop infitino
  39. System.out.println(mensagem);
  40. try {
  41. // lê a linha inteira (assim não precisa limpar o buffer), e já tenta converter para double
  42. // se der certo, o valor é retornado (e aí ele já sai do while)
  43. double valor = Double.parseDouble(scanner.nextLine());
  44. boolean invalido = false;
  45. for (double v : valoresInvalidos) {
  46. if (v == valor) {
  47. // valor digitado é inválido
  48. invalido = true;
  49. break;
  50. }
  51. }
  52. if (invalido) {
  53. System.out.println(mensagemInvalido);
  54. } else {
  55. return valor;
  56. }
  57. } catch (NumberFormatException e) {
  58. System.out.println("Você não digitou um número");
  59. }
  60. }
  61. }
  62.  
  63. public static void main(String[] args) {
  64. Scanner teclado = new Scanner(System.in);
  65.  
  66. while (true) {
  67. menu();
  68. int opcao = lerNumeroInteiro(teclado, "Operação: ");
  69. if (opcao == 0) {
  70. break; // sai do while (true)
  71. } else if (opcao < 1 || opcao > 4) {
  72. System.out.println("Opção inválida, deve estar entre 1 e 4");
  73. } else {
  74. // opção válida, ler valores
  75. double valor1 = lerNumeroDouble(teclado, "Digite o primeiro valor: ");
  76. double valor2;
  77. if (opcao == 4) {
  78. // divisão não pode ter zero
  79. valor2 = lerNumeroDouble(teclado, "Digite o segundo valor: ", new double[]{0}, "Não pode dividir por zero");
  80. } else {
  81. valor2 = lerNumeroDouble(teclado, "Digite o segundo valor: ");
  82. }
  83.  
  84. double resultado = 0;
  85. // aqui eu já sei que a opção é válida (ou seja, entre 1 e 4)
  86. switch (opcao) {
  87. case 1:
  88. resultado = valor1 + valor2;
  89. break;
  90. case 2:
  91. resultado = valor1 - valor2;
  92. break;
  93. case 3:
  94. resultado = valor1 * valor2;
  95. break;
  96. case 4:
  97. resultado = valor1 / valor2;
  98. break;
  99. }
  100. System.out.println("Resultado: " + resultado);
  101. }
  102. }
  103. }
  104. }
Success #stdin #stdout 0.16s 55152KB
stdin
1
3
4
4
3
0
34
0
stdout
-Seja bem-vindo(a) a sua calculadora-
Escolha uma o por favor!!
1. Soma
2. Subtracao
3. Multiplicacao
4. Divisao
0. Sair
Operação: 
Digite o primeiro valor: 
Digite o segundo valor: 
Resultado: 7.0
-Seja bem-vindo(a) a sua calculadora-
Escolha uma o por favor!!
1. Soma
2. Subtracao
3. Multiplicacao
4. Divisao
0. Sair
Operação: 
Digite o primeiro valor: 
Digite o segundo valor: 
Não pode dividir por zero
Digite o segundo valor: 
Resultado: 0.08823529411764706
-Seja bem-vindo(a) a sua calculadora-
Escolha uma o por favor!!
1. Soma
2. Subtracao
3. Multiplicacao
4. Divisao
0. Sair
Operação: