使用将在3次尝试后终止的do-while循环

时间:2014-10-08 00:24:31

标签: java

我坚持的练习是使用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++;

    }
}

2 个答案:

答案 0 :(得分: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

现在有了这个 - 你可以通过很多方式获得退出条件。如果您想在一个语句中执行所有操作,则可以在while条件i<=3中更改i++ <= 3。我倾向于将这两个条件分开,如

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

答案 1 :(得分:0)

它永远不会结束,因为你永远不会增加i计数器,i++;应该在do 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);
    }
}