2014-10-08 59 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); 
    } 
}