2014-07-25 43 views
0

採樣運行的語句:不打印出所有書面

License Validator 
Enter a last name: ab bA 
Enter a last name: ab bA 
Enter year of birth: a12w 
Enter year of birth: 1979 
Enter driver's license number: A123-4567-9801-23 
Consistent 

我的代碼是: 進口java.util.Scanner的; 公共五級{

private static String getLastName(Scanner sc) 
    { 
     System.out.println("License Validator"); 
     System.out.print("enter last name: ab bA"); 
     String lastname=sc.nextLine().trim(); 
     if(lastname.length()==0) 
      lastname=getLastName(sc); 
     int numspaces=0; 
     for(int i=0;i<lastname.length();i++) 
      { 
       if(Character.isSpace(lastname.charAt(i))) 
        { 
         numspaces++; 
        } 
       else if(!Character.isLetter(lastname.charAt(i))) 
        { 
         lastname=getLastName(sc); 
        } 

       if(numspaces>2) 
        { 
         lastname=getLastName(sc); 
        }  
      } 
     return lastname; 
    } 
    private static boolean Character(char charAt) { 
     return false; 
    } 
    public static String getYearOfBirth(Scanner sc) 
    { 
     System.out.print("Enter year of birth: 1979"); 
     String year=sc.nextLine().trim(); 
     if(year.length()==0) 
      year=getYearOfBirth(sc); 
     try 
     { 
     int yearint=Integer.parseInt(year); 
      if(yearint<1900||yearint>1999) 
      { 
       year=getYearOfBirth(sc); 
      } 
     } 
     catch(NumberFormatException e) 
     { 
      year=getYearOfBirth(sc); 
     } 
     return year; 
    } 
    public static String getlicensenumber(Scanner sc) 
    { 
     System.out.print("Enter driver's license number:"); 
     String licencenum=sc.nextLine().trim(); 
     if(licencenum.length()!=17||licencenum.length()==0) 
     { 
      licencenum=getlicensenumber(sc); 
     } 
     String arr[]=licencenum.split("-"); 
     if(arr.length!=4) 
     { 

      licencenum=getlicensenumber(sc); 
     } 
     if(Character.isLetter(arr[0].charAt(0))) 
     { 
      if(Character.isLowerCase(arr[0].charAt(0))) 
      { 

        licencenum=getlicensenumber(sc); 
      } 
     } 
     else 
     { 

      licencenum=getlicensenumber(sc); 
     } 
     try 
     { 
      Long.parseLong(arr[0].substring(1)+arr[1]+arr[2]+arr[3]); 
     } 
     catch(NumberFormatException e) 
     { 
      licencenum=getlicensenumber(sc); 
     } 
     return licencenum; 
    } 
    public static void main(String[] args) 
    { 
     Scanner sc=new Scanner(System.in); 
     String lastname=getLastName(sc); 
     String yearOfBirth=getYearOfBirth(sc); 
     String licensenumber=getlicensenumber(sc); 
     if(licensenumber.substring(0, 1).equalsIgnoreCase(lastname.substring(0, 1))&&(licensenumber.substring(8, 9)+licensenumber.substring(10, 11)).equals(yearOfBirth.substring(2))) 
      { 
       System.out.println("Consistent"); 
      } 
     else 
      System.out.println("fraudulent"); 
    } 

} 

它只會輸出:

License Validator 
Enter last name: 

我很困惑,爲什麼其他字符串方法不輸出?此外,lastName的if語句已將「isSpace」刪除並表示它已折舊。

+0

你提供了什麼樣的輸入,你爲什麼要用遞歸執行這個驗證的一部分? – PakkuDon

回答

0

只有在輸入年份後輸入姓氏和提示輸入許可證號碼時,它纔會打印年份的提示。

Scanner.nextLine()掃描所有的用戶輸入,直到他輸入。所以只有當你按下回車鍵時,它纔會停止讀取輸入內容並轉到下一行代碼。

而且由於您已經對每個輸入進行了驗證檢查,所以在輸入的值有效之前它不會接受您的輸入。一旦你輸入了一個有效的輸入並按回車鍵,它就會進入下一個方法。

編輯:

else if (!Character.isLetter(lastname.charAt(i))) { 
      lastname = getLastName(sc); 
    } 

以上部分在你的代碼檢查,如果該字符是字母或不併重新打印提示,如果它不是一個字母/字母。因此,每當它遇到姓氏中的空格時,就會通過檢查失敗並提示您再次輸入姓氏。

+0

在輸入「System.out.print(」輸入姓氏:「)」行中的姓氏後輸入「 ,它仍然只輸出輸入姓氏行... – questionsAboutJava

+0

什麼是Char方法? – Adarsh

+0

@questionsAboutJava您是否使用與上面的示例輸入相同的輸入? – TNT