为什么我的java代码中会出现此输入验证错误?

时间:2015-11-16 22:06:32

标签: java java.util.scanner console-input

/ *当以mm / dd / yyyy或mm / dd / yyyy格式接收输入时,此代码会产生负面反应。我已经请求了帮助,但我认为除了简单的String vs. int语法动态之外还有更多的帮助。你能帮忙解释一下这段代码出错的原因吗? / *

import java.util.*;
  import java.lang.*;
  public class kspohn_Numerology{
      private static int month,year,day,sumOfDigits;
      private static boolean isLeapYear = year%4==0||year%400==0|| year==2000;
      private static void DOB(){
      int filler1=0,filler2=0;
      Scanner console = new Scanner(System.in);
      System.out.print("Enter birth date (mm/dd/yyyy):");
      int monthB=console.nextInt();
        char symbol1 =console.next().charAt(0);
        int dayB=console.nextInt();
        char symbol2=console.next().charAt(0);
        int yearB=console.nextInt();
    while(year<1980 || year>2280){
    System.out.printf("Bad year: %d\n",year);
    System.out.print("Enter birth date(mm/dd/yyyy):");
    monthB= console.nextInt();
    symbol1 = console.next().charAt(0);
    dayB = console.nextInt();
    symbol2= console.next().charAt(0);
    yearB = console.nextInt();
}
month=monthB;
day=dayB;
year = yearB;
private static void Confirm(){
    if(month>12 || month<1){
        System.out.printf("Bad Month: %d",month);
    }
     if( (month == 2 && day ==29) && !isLeapYear){
    else if(day>31 || day<0){
        System.out.printf("Bad day:%d",day);
    }
    else{
    }

}
 public static void main (String[] args){
   DOB();
    Confirm();
}
}

1 个答案:

答案 0 :(得分:0)

当您的输入为enter number of test cases 5 enter upper/lower limits 2 3 sizeof arr[]: 4 2 3 enter upper/lower limits 30 31 sizeof arr[]: 32 31 enter upper/lower limits 20 27 sizeof arr[]: 28 23 enter upper/lower limits 2 3 sizeof arr[]: 4 2 3 enter upper/lower limits 4 5 sizeof arr[]: 6 5 时,您无法执行mm/dd/yyyy 这将调用console.nextInt(),因为nextInt()正在寻找一个整数,但它看到java.util.InputMismatchException例如并且说它不是整数。

扫描仪使用的默认空白分隔符由01/01/1990http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

识别

您可以设置自定义分隔符Character.isWhitespace(),然后调用console.useDelimiter("/")。这不会为您处理空间,nextInt()将为您提供相同的例外。

这样做的首选方式是:
01 /01/2001视为一行输入。您可以阅读它,然后在mm/dd/yyyy上拆分:

/

您可以在将值解析为整数之前去除空格,以便处理空格。