Java, как бы я установил цикл для ложных входов?

#java

#java

Вопрос:

// по: tlc

 import java.util.Scanner;
public class assignment2 {
public static int t1;
public static int t2;
public static int x;
public static int y1;
public static int m1;
public static int d1;
public static int y2;
public static int m2;
public static int d2;
public static void date1() {

Scanner scanner  = new Scanner (System.in);

System.out.println("Please enter the first date n");
System.out.println ("Please enter the year: "); 
y1=scanner.nextInt();

System.out.println("Please enter the month: ");
m1=scanner.nextInt();

System.out.println("Please enter the day: n");
d1=scanner.nextInt();

}
public static void date2() {
Scanner scanner  = new Scanner (System.in);

System.out.println("Please enter the second date n");
System.out.println ("Please enter the year: "); 
y2=scanner.nextInt();

System.out.println("Please enter the month: ");
m2=scanner.nextInt();

System.out.println("Please enter the day: n");
d2=scanner.nextInt();

}
public static void finaldate() {
x = Math.abs(t1-t2);
}
public static void main(String[] args) {    
date1();
    if (m1==1   3   5   7   8   10   12){
        t1 = ((365*y1) d1 31);}
        else 
        if (m1==2) {
        t1 = ((365*y1) d1 28);}
        else
        if (m1==4   6   9   11); {
        t1 = ((365*y1) d1 30);}

 date2();
    if (m2==1   3   5   7   8   10   12){
        t2 = ((365*y2) d2 31);}
        else 
        if (m2==2) {
        t2 = ((365*y2) d2 28);}
        else
        if (m2==4   6   9   11); {
        t2 = ((365*y2) d2 30);}
 finaldate();

 System.out.println("The difference between the two dates is: "   x   " days.");

}
}
 

Как бы я установил перехват ложного ввода (например: не целое число) и чтобы программа отображала сообщение об ошибке, за которым следует цикл, который вернется к началу программы? Я уже некоторое время борюсь с этим.

Вся помощь приветствуется! 🙂

Ответ №1:

Окружите блоком try catch, чтобы перехватить java.util.Исключение InputMismatchException, которое выдается, когда следующее значение не соответствует целочисленному регулярному выражению.

Как указано в API сканера, метод nextInt() в этих случаях выдает это исключение.

Ответ №2:

существует 2 способа в зависимости от того, как управляется поток управления

с исключениями в качестве потока управления (случай со сканером)

 while(true){
    try{
        y1=scanner.nextInt();
        break;//success break out of loop
    }catch(InputMismatchException e){
        System.out.println("incorrect input! n");
        System.out.println("Please enter the second date n");
    }
}
 

с sentinel в качестве потока управления (не в случае со сканером, но для дальнейшего использования)

 while((y1=scanner.nextInt())!=-1){
    System.out.println("incorrect input! n");
    System.out.println("Please enter the second date n");
}