Первое сообщение, так что мои извинения, если это было сделано неправильно (и я также относительно новичок в программировании, поэтому любые посторонние подсказки также оценены).Java - Try/Catch NumberFormatException использует прежнее значение?
Итак, я написал базовую программу калькулятора на Java. В настоящее время он работает хорошо, но у меня есть особая проблема с NumberFormatException. Вот код:
private static double spaceTestAndConvert(String numInput){
Scanner input= new Scanner(System.in);
if (numInput.equalsIgnoreCase("quit")){
System.exit(1);
}
else if(numInput.equalsIgnoreCase("C/E")){
Restart();
}
try{
return Double.parseDouble(numInput.trim());
}
catch(NumberFormatException nfe){
numInput = "";
System.out.println("Please enter only one number without any spaces or letters: ");
numInput = input.nextLine();
spaceTestAndConvert(numInput.trim());
return Double.parseDouble(numInput.trim());
}
}
Вопрос заключается в том, что после того, как пытается заставить ошибку, введя в несколько входов, которые будут вызывать NumberFormatException, а затем ввести в правильный ввод, программа даст сбой из NumberFormatException со ссылкой на предыдущий некорректный вход ,
I.E. -
"1 2 3"
loops back
"1 2 q 3"
loops back
"12q3 3 sqw 1"
loops back
"12"
crash - Exception in thread "main" java.lang.NumberFormatException: For input string: "12q3 3 sqw 1"
Это происходит только после нескольких случаев исключения. Мне любопытно, почему это делается. Любые советы о том, как исправить это или объяснить, что происходит? Если вам нужна какая-либо другая часть кода, пожалуйста, дайте мне знать! Благодаря!
Сбой при вводе «3 12q3»? – Matt
Вы имели в виду сказать return spaceTestAndConvert (numInput.trim())? – kirbyquerby
Нет. По крайней мере, не первая попытка войти в нее. Я ввел его несколько раз, а затем ввел действительный ввод, и он разбился (как в примере в вопросе). @kirby - Nah. Нужно, чтобы он разбирал строку в двойную, как только я получу допустимый ввод. И вернуть эту ценность. –