2012-12-17 62 views
0

所以我試圖讓我的程序運行通過我的字符串中的每個字符,如果它找到一個數字,然後打印密碼並退出for循環和while循環(不包括while循環但它是'while(test == 0)')。但是如果我輸入一個沒有數字的密碼,它將掃描整個字符串並打印出我需要的數字。出於某種原因,當我用一個數字輸入密碼時,它可以很好地工作。但是當我輸入一個沒有數字的密碼時,我收到一條錯誤消息......任何想法?字符串長度的問題

這裏是我的代碼:

for (int num = 0; num <= passw.length(); num++){ 
    if (Character.isDigit(passw.charAt(num))){ 
     num += 1000; 
     test++; 
     System.out.println(passw); 
    } 

    if (num >= passw.length() && num <= 1000){ 
     System.out.println("You need a number"); 
    } 

} 

回答

2

你正在錯誤的方向前進。只有這個替換所有代碼:

if (passw.matches("\\D*")) { 
    System.out.println("You need a number"); 
} 

它使用正則表達式\D*,這意味着「每個字符是一個非數字」

+0

+1。我認爲這是用於非數字檢查的更簡潔的方法。 – kosa

+0

工作很好。謝謝 –

+0

沒問題。你也可以使用正則表達式來檢查密碼的質量,例如,確保它包含至少一個正則表達式中的所有字符,至少一個大寫字母,一個小寫字母和一個數字,或者多個字符(如果你覺得它更容易,則爲多個字符) ,但是正則表達式是這個功能的首選武器 – Bohemian

2
for (int num = 0; num <= passw.length(); num++){ 

指數從0開始不1

如此循環應該是:

for (int num = 0; num < passw.length(); num++){ 
+0

這工作,但我沒有得到任何打印行說我需要有一個數字...有任何想法嗎? –

+0

我猜如果條件應該是|| (邏輯OR)而不是AND。 – kosa

+0

@MitchStallings:我會試試波西米亞解決方案。 – kosa

2
for (int num = 0; num <= passw.length(); num++){ 

會去字符的地方s結束特林。只是做

for (int num = 0; num < passw.length(); num++){ 

希望幫助!