Eu queria que se alguem digitasse uma string no scanner de numeros ele só reiniciasse a pergunta
7 respostasResolvido
java
G
GustavoPrecisoDeAjud
Queria saber se é possivel que se alguem escrevesse um numero no scanner de strings algum erro acontece-se e ele reiniciasse a pergunta ao inves de parar de funcionar,qualquer ajuda é bem vinda.
package a;
import java.util.Scanner;
public class Calculations {
publicstaticvoidmain(String[]args){longFlourAmount=0;longFlourMin=200;//gramslongEggsAmount=0;longEggsMin=1;longMilkAmount=0;longMilkMin=500;//miligramslongButterAmount=0;longButterMin=30;//gramsStringYes=null;StringUserName=null;StringManteiga=null;booleanDeuErrado;DeuErrado=false;ScanneruserImput;userImput=newScanner(System.in);ScanneruserImputNumbers;userImputNumbers=newScanner(System.in);//constructorSystem.out.println("Olá !"+System.lineSeparator()+"Iniciando CakeMaker2000..");System.out.println("Tudo Pronto !");//Pergunta se o seu nome está certowhile(!"S".equalsIgnoreCase(Yes)){System.out.println("Qual é seu nome?");UserName=userImput.nextLine();System.out.println("O seu nome é "+UserName+" ?");Yes=userImput.nextLine();}while(DeuErrado!=true){try{System.out.println("Seja Bem Vindo "+UserName+" ! \nQuantos gramas de farinha você tem ?");FlourAmount=userImputNumbers.nextLong();}catch(ExceptionnoInt){System.out.println("Não entendi..");DeuErrado=false;}DeuErrado=true;}try{System.out.println("Quantos ovos você tem ?");EggsAmount=userImputNumbers.nextLong();}finally{}try{System.out.println("Quantos mililitros de leite você tem ?");MilkAmount=userImputNumbers.nextLong();}finally{}while(DeuErrado!=true){System.out.println("Você vai usar manteiga ou margarina ?");Manteiga=userImput.nextLine();if(Manteiga.equalsIgnoreCase("Manteiga")||Manteiga.equalsIgnoreCase("Margarina")){DeuErrado=true;}else{System.out.println("Não Entendi ..");}}try{System.out.println("Quantos gramas de "+Manteiga+" você tem ?");ButterAmount=userImputNumbers.nextLong();}finally{}//Main code hereif(FlourAmount<FlourMin||EggsAmount<EggsMin||MilkAmount<MilkMin||ButterAmount<ButterMin){intFORrunning=0;while(FORrunning!=666){for(intJint=0;Jint!=666;Jint++){System.out.println("Você não tem os ingredientes para fazer um bolo.. ");}FORrunning++;}for(intI=0;I!=100;){System.out.println("huAHUhuAHUhauHAUhauhUAHuhauHAUhauHAUhauhUAHuahUHAuhauHAUhauHAUhuahUAHUhauHAUhauHAUHuahUAHuahUHAUhauHAUhauHAUhauhUAHuahUHAUhauHAUhauUAuahuHAuhUHAuha");System.out.println("Bem vindo "+UserName+" !"+System.lineSeparator()+"Bem vindo ao InFeRnO ");I++;}System.exit(0);}else{FlourAmount=FlourAmount/FlourMin;System.out.println("Você tem "+FlourAmount+" gramas de farinha");EggsAmount=EggsAmount/EggsMin;System.out.println("Você tem "+EggsAmount+" ovos");MilkAmount=MilkAmount/MilkMin;System.out.println("Você tem "+MilkAmount+" mililitros de leite");ButterAmount=ButterAmount/ButterMin;System.out.println("Você tem "+ButterAmount+" gramas de "+Manteiga);//find smallest number of emlongmenor;menor=0;if(EggsAmount<=ButterAmount&&ButterAmount<=MilkAmount&&MilkAmount<=FlourAmount){menor=EggsAmount;}elseif(ButterAmount<=MilkAmount&&MilkAmount<=FlourAmount&&FlourAmount<=EggsAmount){menor=ButterAmount;}elseif(MilkAmount<=FlourAmount&&FlourAmount<=EggsAmount&&EggsAmount<=ButterAmount){menor=MilkAmount;}elseif(FlourAmount<=EggsAmount&&EggsAmount<=ButterAmount&&ButterAmount<=MilkAmount){menor=FlourAmount;}System.out.println(UserName+",\nVocê pode fazer "+menor+" Bolos ! ");}}}
Costumo utilizar uma classe StdIO pra facilitar a interação via console:
publicclassCalculations{publicstaticvoidmain(String[]args){longflourAmount=0;longflourMin=200;// gramslongeggsAmount=0;longeggsMin=1;longmilkAmount=0;longmilkMin=500;// miligramslongbutterAmount=0;longbutterMin=30;// gramsStringyes=null;StringuserName=null;Stringmanteiga=null;StdIO.println("Olá !"+System.lineSeparator()+"Iniciando CakeMaker2000..");StdIO.println("Tudo Pronto !");// Pergunta se o seu nome está certowhile(!"S".equalsIgnoreCase(yes)){userName=StdIO.readString("Qual é seu nome? ",texto->!texto.trim().isEmpty());StdIO.println();yes=StdIO.readString("O seu nome é "+userName+" ? ",texto->"S".equals(texto)||"N".equals(texto));}flourAmount=StdIO.readLong("Seja Bem Vindo "+userName+" ! \nQuantos gramas de farinha você tem ? ");eggsAmount=StdIO.readLong("Quantos ovos você tem ? ");milkAmount=StdIO.readLong("Quantos mililitros de leite você tem ? ");manteiga=StdIO.readString("Você vai usar manteiga ou margarina ? ",texto->"Manteiga".equalsIgnoreCase(texto)||"Margarina".equalsIgnoreCase(texto));butterAmount=StdIO.readLong("Quantos gramas de "+manteiga+" você tem ? ");if(flourAmount<flourMin||eggsAmount<eggsMin||milkAmount<milkMin||butterAmount<butterMin){intforRunning=0;while(forRunning!=666){for(intJint=0;Jint!=666;Jint++){StdIO.println("Você não tem os ingredientes para fazer um bolo.. ");}forRunning++;}for(intI=0;I!=100;){StdIO.println("huAHUhuAHUhauHAUhauhUAHuhauHAUhauHAUhauhUAHuahUHAuhauHAUhauHAUhuahUAHUhauHAUhauHAUHuahUAHuahUHAUhauHAUhauHAUhauhUAHuahUHAUhauHAUhauUAuahuHAuhUHAuha");StdIO.println("Bem vindo "+userName+" !"+System.lineSeparator()+"Bem vindo ao InFeRnO ");I++;}System.exit(0);}else{flourAmount=flourAmount/flourMin;StdIO.println("Você tem "+flourAmount+" gramas de farinha");eggsAmount=eggsAmount/eggsMin;StdIO.println("Você tem "+eggsAmount+" ovos");milkAmount=milkAmount/milkMin;StdIO.println("Você tem "+milkAmount+" mililitros de leite");butterAmount=butterAmount/butterMin;StdIO.println("Você tem "+butterAmount+" gramas de "+manteiga);// find smallest number of emlongmenor;menor=0;if(eggsAmount<=butterAmount&&butterAmount<=milkAmount&&milkAmount<=flourAmount){menor=eggsAmount;}elseif(butterAmount<=milkAmount&&milkAmount<=flourAmount&&flourAmount<=eggsAmount){menor=butterAmount;}elseif(milkAmount<=flourAmount&&flourAmount<=eggsAmount&&eggsAmount<=butterAmount){menor=milkAmount;}elseif(flourAmount<=eggsAmount&&eggsAmount<=butterAmount&&butterAmount<=milkAmount){menor=flourAmount;}StdIO.println(userName+",\nVocê pode fazer "+menor+" Bolos ! ");}}}
G
GustavoPrecisoDeAjud
Cara, muito obrigado pela ajuda , mas o readInt não está mudando a int flouramount por algum motivo , e quando eu ponho para StdIO.println(flourAmount);
a resposta é null como se fosse uma string…
Description
Resource
Path
Location
Type
Cannot invoke test(int) on the primitive type int
StdIO.java
/a/src/a
line 463
Java Problem
S
staroski
Se você não postar o código que fez, não tem como identificar o problema.
publicstaticvoidmain(String[]args){intflourAmount=0;intflourMin=1;// gramsinteggsAmount=0;integgsMin=1;intmilkAmount=0;intmilkMin=1;// miligramsintbutterAmount=0;intbutterMin=1;// gramsStringyes=null;StringuserName=null;Stringmanteiga=null;Stringtest;StdIO.println("Olá !"+System.lineSeparator()+"Iniciando CakeMaker2000..");StdIO.println("Tudo Pronto !");// Pergunta se o seu nome está certowhile(!"S".equalsIgnoreCase(yes)){userName=StdIO.readString("Qual é seu nome? ",texto->!texto.trim().isEmpty());StdIO.println();yes=StdIO.readString("O seu nome é "+userName+" ? ",texto->"S".equalsIgnoreCase(texto)||"N".equalsIgnoreCase(texto));}StdIO.print("Seja bem vindo "+userName+" !"+System.lineSeparator());pText(flourAmount,"Quantos gramas de farinha você tem ?");StdIO.println(flourAmount);pText(eggsAmount,"Quantos ovos você tem ?");pText(milkAmount,"Quantos mililitros de leite você tem ?");manteiga=StdIO.readString("Você vai usar manteiga ou margarina ? ",texto->"Manteiga".equalsIgnoreCase(texto)||"Margarina".equalsIgnoreCase(texto));pText(butterAmount,"Quantos gramas de manteiga você tem ?");if(flourAmount<flourMin||eggsAmount<eggsMin||milkAmount<milkMin||butterAmount<butterMin){intforRunning=0;while(forRunning!=2){for(intJint=0;Jint!=666;Jint++){StdIO.println("Você não tem os ingredientes para fazer um bolo.. ");}forRunning++;}for(intI=0;I!=2;){StdIO.println("huAHUhuAHUhauHAUhauhUAHuhauHAUhauHAUhauhUAHuahUHAuhauHAUhauHAUhuahUAHUhauHAUhauHAUHuahUAHuahUHAUhauHAUhauHAUhauhUAHuahUHAUhauHAUhauUAuahuHAuhUHAuha");StdIO.println("Bem vindo "+userName+" !"+System.lineSeparator()+"Bem vindo ao InFeRnO ");I++;}System.exit(0);}else{flourAmount=flourAmount/flourMin;StdIO.println("Você tem "+flourAmount+" gramas de farinha");eggsAmount=eggsAmount/eggsMin;StdIO.println("Você tem "+eggsAmount+" ovos");milkAmount=milkAmount/milkMin;StdIO.println("Você tem "+milkAmount+" mililitros de leite");butterAmount=butterAmount/butterMin;StdIO.println("Você tem "+butterAmount+" gramas de "+manteiga);// find smallest number of emlongmenor;menor=0;if(eggsAmount<=butterAmount&&butterAmount<=milkAmount&&milkAmount<=flourAmount){menor=eggsAmount;}elseif(butterAmount<=milkAmount&&milkAmount<=flourAmount&&flourAmount<=eggsAmount){menor=butterAmount;}elseif(milkAmount<=flourAmount&&flourAmount<=eggsAmount&&eggsAmount<=butterAmount){menor=milkAmount;}elseif(flourAmount<=eggsAmount&&eggsAmount<=butterAmount&&butterAmount<=milkAmount){menor=flourAmount;}StdIO.println(userName+",\nVocê pode fazer "+menor+" Bolos ! ");}}publicstaticvoidpText(intvalor,Stringtexto){booleanDeuErrado=true;while(DeuErrado==true){try{valor=StdIO.readInt(texto);DeuErrado=false;}catch(java.lang.NumberFormatExceptione){StdIO.print("So use números por favor"+System.lineSeparator());DeuErrado=true;}}DeuErrado=true;}
}
S
staroski
Primeiro, o código que você postou nem compila pois os import estão com sintaxe inválida.
Segundo, se arrumar os import e executar o programa, a saída será idêntica à essa:
Dica: Nem tem como o flourAmount ser impresso nomo null, afinal, é um tipo primitivo e não um objeto.
Ou você posta o código que realmente está apresentando valores null ou não vai dar pra te ajudar.
G
GustavoPrecisoDeAjud
Esse daqui ta dando zero agora , mas antes tava dando null por algum motivo… mas era para ele imprimir o numero que você digitou , entende?
quando uso flourAmount = StdIO.readInt();
Depois do valor que você digita é para aparecer o valor da variavel que deveria mudar…
Acho que estou usando errado …
PS: desculpa elas linhas repitidas , é que eu iria mandar pra um amigo nque tbm ta apredendo java… kkk dsclpa ai , e obrigado por me ajudar tanto ! (kkkkkk meu deus q vergonha era pra eu tirar isso)
S
Solucao aceita
staroski1 like
O teu método pText é void e java não passa tipos primitivos por referência, você tem que fazer assim:
publicstaticintpText(Stringtexto){
while(true){
try{
returnStdIO.readInt(texto);}catch(NumberFormatExceptione){
StdIO.println("So use números por favor");}
}
}
E usar asim:
flourAmount=pText("Quantos gramas de farinha você tem ?");StdIO.println(flourAmount);