#java #java.util.scanner
#java #java.util.scanner
Вопрос:
Я изучал JAVA, и у меня есть небольшие сомнения по поводу кода :
class apple {
public static void main(String[] args) {
int[] num = new int[3];
Scanner input = new Scanner(System.in);
for (int i = 0; i < num.length; i ) {
try {
num[i] = input.nextInt();
} catch (Exception e) {
System.out
.println("Invalid number..assigning default value 20");
num[i] = 20;
}
}
for (int i = 0; i < num.length; i ) {
System.out.println(num[i]);
}
}
}
Я написал небольшую программу для обработки исключений, если пользовательский ввод не является Int, генерирует исключение и присваивает значение по умолчанию.
Если я помещаю оператор scanner внутри цикла for , он работает нормально, но если я выношу его за пределы, присваивается то же значение, при котором было выдано исключение, т.е. я ввожу char, а не int.
Но если я ввожу все целые числа, он присваивает правильные значения в массиве.
Scanner input = new Scanner(System.in);
Надеюсь, вы, ребята, поняли мой вопрос.
Ответ №1:
Scanner#nextInt
не продвигается дальше ввода, если не удается проанализировать целое число, поэтому, если вы продолжаете вызывать его после сбоя, он будет продолжать пытаться снова проанализировать тот же ввод, выбрасывая InputMismatchException
.
Вы можете вызвать Scanner#next
, игнорируя возвращаемую строку, в своем catch
блоке, чтобы пропустить недопустимый ввод:
try {
num[i] = input.nextInt();
} catch (Exception e) {
System.out
.println("Invalid number..assigning default value 20");
num[i] = 20;
input.next();
}
Комментарии:
1. Это то, что вы имеете в виду, он по-прежнему передает то же значение и выдает исключение..
try { num[i] = input.nextInt(); } catch (Exception e) { System.out.println("Wrong value. PLease try again.."); num[i] = input.nextInt(); }
Ответ №2:
try
{
num[i] = input.nextInt();
}
catch(InputMismatchException ip)
{
System.out.println("Invalid number..assigning default value 20");
num[i] = 20;
input.next();
}
Комментарии:
1. 1 но вы должны добавить некоторые пояснения к своему коду .
Ответ №3:
Лучшим кодом может быть то, что вы можете проверить, является ли следующее значение целым или нет, поэтому вам даже не нужно перехватывать исключения:
public static void main(String[] args) {
int[] num = new int[3];
Scanner input = new Scanner(System.in);
for (int i = 0; i < num.length; i )
{
if(input.hasNextInt())
{
num[i] = input.nextInt();
}
else
{
System..out.println("non integer value.. will assign it default value 20");
num[i]=20;
input.next();
}
}
for (int i = 0; i < num.length; i ) {
System.out.println(num[i]);
}
}