2014-10-08 108 views
0

我被卡住的練習是使用do-while循環的練習。我應該提示用戶輸入密碼,然後再次輸入密碼。如果這些密碼匹配,他們將獲得訪問權限。如果兩個密碼不匹配,那麼我應該提示用戶再次輸入3次密碼。第三次後,它會告訴他們訪問被拒絕。我很難區分do-while循環中的什麼地方。使用將在3次嘗試後終止的do-while循環

這是我(更新)...仍然困惑,爲什麼它沒有終止:

import java.util.Scanner; 

public class PasswordChecker{ 

    public static void main(String[] args) { 

    Scanner sc = new Scanner(System.in);  

    String password1;  
    String password2;  

    int i = 1; 

    do { 

     System.out.println("Please enter your password"); 
     password1 = sc.nextLine(); 

     System.out.println("Please re-enter your password"); 
     password2 = sc.nextLine(); 

    } while(!password1.equals(password2) && i<=3); 

    i++; 

    } 
} 
+1

http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java – 2014-10-08 00:25:59

+4

'而(ⅰ<= 3 && password1.equals(密碼)!);' – 2014-10-08 00:26:21

+2

'i'在'do-while'循環之外增加,因此在檢查密碼時永遠不會增加。您也永遠不會讓用戶有機會在「do-while」循環中重新輸入密碼。首先讓它工作一次(沒有循環),然後將循環包裝起來,一定要包含循環所需的退出邏輯 – MadProgrammer 2014-10-08 00:28:19

回答

1

你=比較是錯誤的。如果你想確保兩個字符串具有相同的值,你需要使用String equals方法。 '='是賦值運算符if (a=b) {}不能編譯,'=='檢查兩個變量是否指向相同的東西。 if (a==b) {}不會總是成功(請參閱下面的示例)。 String equals方法總是查看由String表示的實際值。

String a = "1"; 
String b = "12".substring(0,1); 
a == b // false 
a.equals(b) // true 

現在有了這種方式 - 有很多方法可以得到退出條件。如果您想在一個聲明中完成所有操作,則可以在條件爲i++ <= 3的條件下更改i<=3。我的選擇是兩個條件分開這樣

do { 
    ... 
    if (password.equals(password2)) { 
     break; 
    } 
} while (i++ <= 3); 
0

它永遠不會結束,因爲你永遠不遞增i櫃檯,i++;應該是while語句的裏面做的。嘗試初始化i = 0,並在每次操作開始時遞增。

import java.util.Scanner; 

public class PasswordChecker{ 

    public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in);  

     String password1;  
     String password2;  

     int i = 0; 

     do { 
     i++; 

     System.out.println("Please enter your password"); 
     password1 = sc.nextLine(); 

     System.out.println("Please re-enter your password"); 
     password2 = sc.nextLine(); 

    } while(!password1.equals(password2) && i<=3); 
    } 
}