2016-09-13 131 views
0

因此,首先的問題如下: 編寫提示用戶輸入格式爲DDD-DD-DDDD,其中d是一個數字一個社會安全號碼的程序。你的程序應該檢查輸入是否有效。下面是樣品運行:如下關於else語句(JAVA)

Enter a SSN: 23-23-5435 

23-23-5435 is an invalid Social Security Number. 

我的代碼:

import java.util.Scanner; 

public class SSN { 

    public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.print("Please enter a Social Security Number in the format DDD-DD-DDDD: "); 
    String ssn = input.nextLine(); 

    boolean correct = true; 

    if (ssn.length() != 11) { 
     correct = false; 
    } else { 
     if (!('0' <= ssn.charAt(0) && ssn.charAt(0) <= '9')) { 
     correct = false; 
     } 
     if (!('0' <= ssn.charAt(1) && ssn.charAt(1) <= '9')) { 
     correct = false; 
     } 
     if (!('0' <= ssn.charAt(2) && ssn.charAt(2) <= '9')) { 
     correct = false; 
     } 
     if (ssn.charAt(3) != '-') { 
     correct = false; 
     } 
     if (!('0' <= ssn.charAt(4) && ssn.charAt(4) <= '9')) { 
     correct = false; 
     } 
     if (!('0' <= ssn.charAt(5) && ssn.charAt(5) <= '9')) { 
     correct = false; 
     } 
     if (ssn.charAt(6) != '-') { 
     correct = false; 
     } 
     if (!('0' <= ssn.charAt(7) && ssn.charAt(7) <= '9')) { 
     correct = false; 
     } 
     if (!('0' <= ssn.charAt(8) && ssn.charAt(8) <= '9')) { 
     correct = false; 
     } 
     if (!('0' <= ssn.charAt(9) && ssn.charAt(9) <= '9')) { 
     correct = false; 
     } 
     if (!('0' <= ssn.charAt(10) && ssn.charAt(10) <= '9')) { 
     correct = false; 
     } 
    } 

    if (correct == true) { 
     System.out.println(ssn + " is a valid Social Security Number."); 
    } else { 
     System.out.println(ssn + " is an ivalid Social Security Number."); 
    } 
    } 
} 

這是問我的professer後一個正確的答案,雖然

Enter a SSN: 232-23-5435 

232-23-5435 is a valid Social Security Number. 

另一項測試。

不過,我還是不明白,爲什麼我需要的else{}的一堆if語句之間。

如果我參加了else{}走,它適用於正確的核潛艇,但是當我輸入一些無效的,返回:

Please enter a Social Security Number in the format DDD-DD-DDDD: sd 
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2 
    at java.lang.String.charAt(Unknown Source) 
    at SSN.main(SSN.java:22) 

出了什麼事?爲什麼我需要else?不是程序只是檢查每個if語句,並通過檢查correct是否正確爲假來輸出結果?

我的意思是,即使沒有其他人,即使有更多的計算,但它不應該工作一樣?

我很困惑出了什麼問題,請幫忙,謝謝!

+0

。使用正則表達式並查看其他if語句 – Li357

+0

如果使用循環,會更容易:在循環內部,檢查是否在位置3或6,並使用它來決定是否查找「-'或數字。 –

+0

如果不是正則表達式,至少循環字符串,而不是所有那些不美觀,難以維護,重複。 – ChiefTwoPencils

回答

0

第一個if檢查輸入是否有正確的長度。如果不是,它不會檢查其他條件。

如果刪除else,則所有的條件將被檢查。所以如果你有5個長度的輸入,你可以在訪問第六個字符時獲得StringIndexOutOfBoundsException

您可以使用Pattern.compile(regex),然後檢查你的正則表達式匹配的輸入,而不是寫這樣的unclean code ifs

+0

我明白了,非常感謝! – yyin

0

因爲你試圖讀取並不存在的人物。如果你輸入的字符串少於9個字符如果輸入了錯誤的格式,那麼它有時會給出一個出界異常,因爲某些部分可能缺少他下面的代碼會拋出StringIndexOutOfBoundsException

ssn.charAt(8)