簡體   English   中英

為什么這個輸入驗證錯誤會出現在我的 java 代碼中?

[英]why does this input validation error occur in my java code?

/* 當接收到格式為 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();
}
}

當您的輸入為mm/dd/yyyy ,您不能執行console.nextInt()
這將調用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));

您可以在將值解析為整數之前去除空格,以便處理空格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM