-2

/* 当以 mm/dd/yyyy 或 mm/dd/yyyy 格式接收输入时,此代码会产生负面反应。我已经寻求帮助,但我认为它不仅仅是一个字符串与 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();
}
}
4

1 回答 1

0

当你的输入是mm/dd/yyyy,你不能做console.nextInt()
这将调用 a java.util.InputMismatchException,因为 nextInt() 正在寻找一个整数,但它看到01/01/1990例如并说它不是整数。

扫描仪使用的默认空白分隔符由Character.isWhitespace()( http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html )识别

您可以设置自定义分隔符console.useDelimiter("/"),然后调用nextInt(). 这不会为您处理空间,并且01 /01/2001会给您同样的例外。

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

String line = console.nextLine();
String arr[] = line.split("/");
for(String s : arr)
    System.out.println(Integer.parseInt(s));

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

于 2015-11-16T23:52:14.957 回答