程序要求输入密码,然后你输入密码,否则你会得到3次尝试,如果你失败了3次,它会锁定(理论上)。
问题:
我应该如何编写while循环,现在它只是说" Line无法解析为变量"我不知道如何解决这个问题。
减去尝试也不起作用。我该怎么写呢?
以下是代码:
import java.util.Scanner;
public class Application {
public static void main(String[] args) {
while(line != correctPass) {
String correctPass = "Java";
System.out.println("Enter the password");
Scanner input = new Scanner(System.in);
String line = input.nextLine();
if(line.equals(correctPass)) {
System.out.println("Wellcome back sir!");
break;
}
else {
int num = 3;
System.out.println("Wrong password, please try again! " + num + " attempts left!");
num = num - 1;
if(num == 0) {
System.out.println("System Locked!");
break;
}
}
}
}
}
答案 0 :(得分:2)
line
在声明之前使用。尝试将声明置于顶部String line = null
。
另外,因为您在循环中设置了num = 3
,所以它永远不会减少。它需要在循环外设置为3。
我认真建议您查看this tutorial。
还有一些其他问题,您可能需要查看something != somethingElse
和!something.equals(somethingElse)
之间的区别。
答案 1 :(得分:1)
变量行和 correctPass 在循环内声明,因此条件语句无法访问这些变量,应在循环外声明和初始化。
可能是这样的:
public class Application {
public static void main(String[] args) {
String correctPass = "Java";
Scanner input = new Scanner(System.in);
int num = 3;
System.out.println("Enter the password");
String line;
while (num != 0 && !(line = input.nextLine()).equals(correctPass)) {
System.out.println("Wrong password, please try again! " + num + " attempts left!");
num = num - 1;
System.out.println("Enter the password");
}
if (num == 0) {
System.out.println("System Locked!");
} else {
System.out.println("Wellcome back sir!");
}
}
}
答案 2 :(得分:1)
我更愿意使用do while
,这是您在一段时间内尝试实现的do while
的实际逻辑。
import java.util.Scanner;
public class Application {
public static void main(String[] args) {
String correctPass = "Java";
int attempts = 3;
boolean authenticated = false;
Scanner input = new Scanner(System.in);
do {
System.out.println("Enter the password");
String userPass = input.nextLine();
if( userPass.equals(correctPass) ){
System.out.println("Welcome back sir!");
authenticated = true;
} else {
System.out.println("Wrong password, please try again! " + attempts + " attempts left!");
attempts = attempts - 1;
if(attempts == 0) {
System.out.println("System Locked!");
break;
}
}
} while(! authenticated);
input.close();
}
}
指出代码中的错误,
1)您需要使用.equals()
来比较字符串
2)原始密码应在循环之前声明
3)你为每个循环重新初始化num
变量(所以你肯定不会在任何情况下被锁定),所以它也应该在循环之前声明。< / p>
答案 3 :(得分:0)
你需要在while循环之外声明行 - 变量在声明之前不存在(并且不能被引用)。
您在while循环条件中同时使用correctPass
和line
,但它们分别在1行和3行之后才会创建。
while(line != correctPass) {
String correctPass = "Java";
System.out.println("Enter the password");
Scanner input = new Scanner(System.in);
String line = input.nextLine();
你需要重新格式化它看起来更像这样:
String correctPass = "Java";
int num = 3;
Scanner input = new Scanner(System.in);
System.out.println("Enter the password");
String line = input.nextLine();
while(!line.equals(correctPass)) {
num = num - 1;
if(num == 0) {
System.out.println("System Locked!");
break;
}
System.out.println("Wrong password, please try again! " + num + " attempts left!");
line = input.nextLine();
}
为什么:
每次while循环运行时都不需要重新创建correctPass
,因为每次都是相同的。
同样,每次重新创建扫描仪都很愚蠢,因为它不会发生变化。
而且,正如评论中所指出的,如果你在每次循环时定义num
它将永远不会达到零,因此永远不会锁定,因为每次重新定义为3。
.equals需要比较字符串。 This is why if you're curious.
答案 4 :(得分:0)
line
不存在