java - 使用 do-while 循环,尝试 3 次后将终止

标签 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++;

    }
}

最佳答案

你的 = 比较是错误的。如果要确保两个字符串具有相同的值,则需要使用 String equals 方法。 '=' 是赋值运算符 if (a=b) {}无法编译,“==”检查两个变量是否指向同一对象。 if (a==b) {}并不总是成功(参见下面的示例)。 String equals 方法始终查看字符串表示的实际值。

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);

关于java - 使用 do-while 循环,尝试 3 次后将终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26247375/

相关文章:

javascript - 从 Java byte[] -> Base64 -> Javascript ArrayBuffer -> Base64 -> Byte[]

java - 修改现有 PDF 而不创建新 pdf 文件

Java:所有构造函数的公共(public)代码?

java - 递归计算 base 的 n 次方的值

java - 什么是 uber JAR 文件?

java - 如何在 Hibernate 中正确实现具有复合 id 的域对象?

java - 单例模式面试

java - 验证断言是否已在 Assertj 中调用

java - 如何通过流为通用 ArrayList<T> 编写 reduce 函数

java - 什么时候使用 System.identityhashcode() 和 hashcode() 方法?