/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
class Ideone
{
static void menu( ) {
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" ) ; }
private static int lerNumeroInteiro
( Scanner scanner,
String mensagem
) { while ( true ) { // loop infitino
try {
// lê a linha inteira (assim não precisa limpar o buffer), e já tenta converter para inteiro
// se der certo, o valor é retornado (e aí ele já sai do while)
return Integer .
parseInt ( scanner.
nextLine ( ) ) ; System .
out .
println ( "Você não digitou um número" ) ; }
}
}
private static double lerNumeroDouble
( Scanner scanner,
String mensagem
) { // esta versão não tem valores inválidos
return lerNumeroDouble( scanner, mensagem, new double [ ] { } , "" ) ;
}
private static double lerNumeroDouble
( Scanner scanner,
String mensagem,
double [ ] valoresInvalidos,
String mensagemInvalido
) { while ( true ) { // loop infitino
try {
// lê a linha inteira (assim não precisa limpar o buffer), e já tenta converter para double
// se der certo, o valor é retornado (e aí ele já sai do while)
double valor
= Double .
parseDouble ( scanner.
nextLine ( ) ) ; boolean invalido = false ;
for ( double v : valoresInvalidos) {
if ( v == valor) {
// valor digitado é inválido
invalido = true ;
break ;
}
}
if ( invalido) {
System .
out .
println ( mensagemInvalido
) ; } else {
return valor;
}
System .
out .
println ( "Você não digitou um número" ) ; }
}
}
public static void main
( String [ ] args
) { Scanner teclado
= new Scanner
( System .
in ) ;
while ( true ) {
menu( ) ;
int opcao = lerNumeroInteiro( teclado, "Operação: " ) ;
if ( opcao == 0 ) {
break ; // sai do while (true)
} else if ( opcao < 1 || opcao > 4 ) {
System .
out .
println ( "Opção inválida, deve estar entre 1 e 4" ) ; } else {
// opção válida, ler valores
double valor1 = lerNumeroDouble( teclado, "Digite o primeiro valor: " ) ;
double valor2;
if ( opcao == 4 ) {
// divisão não pode ter zero
valor2 = lerNumeroDouble( teclado, "Digite o segundo valor: " , new double [ ] { 0 } , "Não pode dividir por zero" ) ;
} else {
valor2 = lerNumeroDouble( teclado, "Digite o segundo valor: " ) ;
}
double resultado = 0 ;
// aqui eu já sei que a opção é válida (ou seja, entre 1 e 4)
switch ( opcao) {
case 1 :
resultado = valor1 + valor2;
break ;
case 2 :
resultado = valor1 - valor2;
break ;
case 3 :
resultado = valor1 * valor2;
break ;
case 4 :
resultado = valor1 / valor2;
break ;
}
System .
out .
println ( "Resultado: " + resultado
) ; }
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBJZGVvbmUKewogICAgc3RhdGljIHZvaWQgbWVudSgpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1TZWphIGJlbS12aW5kbyhhKSBhIHN1YSBjYWxjdWxhZG9yYS0iKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVzY29saGEgdW1hIG8gcG9yIGZhdm9yISEiKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjEuIFNvbWEiKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjIuIFN1YnRyYWNhbyIpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMy4gTXVsdGlwbGljYWNhbyIpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiNC4gRGl2aXNhbyIpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMC4gU2FpciIpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGludCBsZXJOdW1lcm9JbnRlaXJvKFNjYW5uZXIgc2Nhbm5lciwgU3RyaW5nIG1lbnNhZ2VtKSB7CiAgICAgICAgd2hpbGUgKHRydWUpIHsgLy8gbG9vcCBpbmZpdGlubwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obWVuc2FnZW0pOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy8gbMOqIGEgbGluaGEgaW50ZWlyYSAoYXNzaW0gbsOjbyBwcmVjaXNhIGxpbXBhciBvIGJ1ZmZlciksIGUgasOhIHRlbnRhIGNvbnZlcnRlciBwYXJhIGludGVpcm8KICAgICAgICAgICAgICAgIC8vIHNlIGRlciBjZXJ0bywgbyB2YWxvciDDqSByZXRvcm5hZG8gKGUgYcOtIGVsZSBqw6Egc2FpIGRvIHdoaWxlKQogICAgICAgICAgICAgICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQoc2Nhbm5lci5uZXh0TGluZSgpKTsKICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVm9jw6ogbsOjbyBkaWdpdG91IHVtIG7Dum1lcm8iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBkb3VibGUgbGVyTnVtZXJvRG91YmxlKFNjYW5uZXIgc2Nhbm5lciwgU3RyaW5nIG1lbnNhZ2VtKSB7CiAgICAgICAgLy8gZXN0YSB2ZXJzw6NvIG7Do28gdGVtIHZhbG9yZXMgaW52w6FsaWRvcwogICAgICAgIHJldHVybiBsZXJOdW1lcm9Eb3VibGUoc2Nhbm5lciwgbWVuc2FnZW0sIG5ldyBkb3VibGVbXXt9LCAiIik7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZG91YmxlIGxlck51bWVyb0RvdWJsZShTY2FubmVyIHNjYW5uZXIsIFN0cmluZyBtZW5zYWdlbSwgZG91YmxlW10gdmFsb3Jlc0ludmFsaWRvcywgU3RyaW5nIG1lbnNhZ2VtSW52YWxpZG8pIHsKICAgICAgICB3aGlsZSAodHJ1ZSkgeyAvLyBsb29wIGluZml0aW5vCiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtZW5zYWdlbSk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAvLyBsw6ogYSBsaW5oYSBpbnRlaXJhIChhc3NpbSBuw6NvIHByZWNpc2EgbGltcGFyIG8gYnVmZmVyKSwgZSBqw6EgdGVudGEgY29udmVydGVyIHBhcmEgZG91YmxlCiAgICAgICAgICAgICAgICAvLyBzZSBkZXIgY2VydG8sIG8gdmFsb3Igw6kgcmV0b3JuYWRvIChlIGHDrSBlbGUgasOhIHNhaSBkbyB3aGlsZSkKICAgICAgICAgICAgICAgIGRvdWJsZSB2YWxvciA9IERvdWJsZS5wYXJzZURvdWJsZShzY2FubmVyLm5leHRMaW5lKCkpOwogICAgICAgICAgICAgICAgYm9vbGVhbiBpbnZhbGlkbyA9IGZhbHNlOwogICAgICAgICAgICAgICAgZm9yIChkb3VibGUgdiA6IHZhbG9yZXNJbnZhbGlkb3MpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSB2YWxvcikgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWxvciBkaWdpdGFkbyDDqSBpbnbDoWxpZG8KICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZG8gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaW52YWxpZG8pIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obWVuc2FnZW1JbnZhbGlkbyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxvcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVm9jw6ogbsOjbyBkaWdpdG91IHVtIG7Dum1lcm8iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgU2Nhbm5lciB0ZWNsYWRvID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKCiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgbWVudSgpOwogICAgICAgICAgICBpbnQgb3BjYW8gPSBsZXJOdW1lcm9JbnRlaXJvKHRlY2xhZG8sICJPcGVyYcOnw6NvOiAiKTsKICAgICAgICAgICAgaWYgKG9wY2FvID09IDApIHsKICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBzYWkgZG8gd2hpbGUgKHRydWUpCiAgICAgICAgICAgIH0gZWxzZSBpZiAob3BjYW8gPCAxIHx8IG9wY2FvID4gNCkgewogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPcMOnw6NvIGludsOhbGlkYSwgZGV2ZSBlc3RhciBlbnRyZSAxIGUgNCIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gb3DDp8OjbyB2w6FsaWRhLCBsZXIgdmFsb3JlcwogICAgICAgICAgICAgICAgZG91YmxlIHZhbG9yMSA9IGxlck51bWVyb0RvdWJsZSh0ZWNsYWRvLCAiRGlnaXRlIG8gcHJpbWVpcm8gdmFsb3I6ICIpOwogICAgICAgICAgICAgICAgZG91YmxlIHZhbG9yMjsKICAgICAgICAgICAgICAgIGlmIChvcGNhbyA9PSA0KSB7CiAgICAgICAgICAgICAgICAgICAgLy8gZGl2aXPDo28gbsOjbyBwb2RlIHRlciB6ZXJvCiAgICAgICAgICAgICAgICAgICAgdmFsb3IyID0gbGVyTnVtZXJvRG91YmxlKHRlY2xhZG8sICJEaWdpdGUgbyBzZWd1bmRvIHZhbG9yOiAiLCBuZXcgZG91YmxlW117MH0sICJOw6NvIHBvZGUgZGl2aWRpciBwb3IgemVybyIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2YWxvcjIgPSBsZXJOdW1lcm9Eb3VibGUodGVjbGFkbywgIkRpZ2l0ZSBvIHNlZ3VuZG8gdmFsb3I6ICIpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGRvdWJsZSByZXN1bHRhZG8gPSAwOwogICAgICAgICAgICAgICAgLy8gYXF1aSBldSBqw6Egc2VpIHF1ZSBhIG9ww6fDo28gw6kgdsOhbGlkYSAob3Ugc2VqYSwgZW50cmUgMSBlIDQpCiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wY2FvKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSB2YWxvcjEgKyB2YWxvcjI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvID0gdmFsb3IxIC0gdmFsb3IyOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IHZhbG9yMSAqIHZhbG9yMjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSB2YWxvcjEgLyB2YWxvcjI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXN1bHRhZG86ICIgKyByZXN1bHRhZG8pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9