Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Try{}catch(){} в java

васильев иван Знаток (264), на голосовании 3 месяца назад
Всем Здравствуйте!
Разбираюсь в работе try catch, накидал не большой код, зациклил его, для того, что бы получить только число на выходе число, а не ошибку при вводе, но при вводе строк он начинает циклить бесконечно
 import java.util.ArrayList; 
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int p = 0;
boolean y = false;
while(!y){
System.out.println("введите число");
try {
p = scanner.nextInt();
y = true;
} catch (Exception exception) {
System.out.println("еще раз, это не число");
y = false;
}
}
System.out.println("число" + p);
}
}
Голосование за лучший ответ
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (157169) 4 месяца назад
GPT-4o
Проблема в вашем коде заключается в том, что при возникновении ошибки ввода (например, когда пользователь вводит строку вместо числа), `Scanner` не очищает некорректный ввод из буфера, поэтому он зацикливается на той же самой ошибке. Для решения этой проблемы можно добавить вызов метода `scanner.nextLine()` в блоке `catch`, чтобы очистить некорректный ввод.

Вот исправленный код:
  
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int p = 0;
boolean y = false;
while(!y) {
System.out.println("введите число");
try {
p = scanner.nextInt();
y = true;
} catch (Exception exception) {
System.out.println("еще раз, это не число");
scanner.nextLine(); // очищаем некорректный ввод
}
}
System.out.println("число " + p);
}
}


Теперь при неправильном вводе программа будет очищать буфер и снова запрашивать у пользователя ввод числа, не зацикливаясь на той же самой ошибке.
васильев иванЗнаток (264) 4 месяца назад
О! Точно, а я ломаю голову в чем же дело, а если его очистить путём clean, тот же самый эффект по идее?
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (157169) васильев иван, https://pastebin.com/Y5rrnRaD
Похожие вопросы