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