我创建了这个简单的程序,其中有一个密码,出于某种原因,如果我输入密码,程序将继续执行,即使我使用do和while。
import java.util.Scanner;
public class PassCheck {
double password;
int UserInp;
public void Validation() {
do{
System.out.println("Please enter the password");
Scanner in = new Scanner(System.in);
int password = in.nextInt();
} while (password == 1111);
System.out.println("Please select whether you would like to workout area or perimeter");
System.out.println("Enter 1 for area and Enter 2 for perimeter");
Scanner in = new Scanner(System.in);
int UserInp = in.nextInt();
switch (UserInp){
case 1:
CircleArea CircleAreaObject = new CircleArea();
CircleAreaObject.area();
case 2:
}
}
}
答案 0 :(得分:1)
您有两个密码变量。 “while”条件使用方法变量。在while条件中的范围内声明了另一个变量 - 一个不是“while”条件正在使用的变量。
因此,一种解决方案是在do / while循环之前将“int password”声明拉出到一行中。然后在do / while循环范围内分配它。并删除课程中的PassCheck密码声明。
答案 1 :(得分:0)
您实际分配的int密码仅在do {...}块的括号内有效。在这段时间内,您将引用永远不会是1111的双重密码。
do{
System.out.println("Please enter the password");
Scanner in = new Scanner(System.in);
int password = in.nextInt(); // This "password"...
} while (password == 1111); // is NOT the same variable as this...
在while(密码= 1111)中,您正在引用双重密码(正如已经提到的那样,为什么这是双倍的?)。你不能在这里引用本地int密码,因为它的范围仅限于上面括号的内部。
答案 2 :(得分:0)
您所做的是在password
块的范围内创建类型为int
的新变量do
,java允许您执行此操作,因为pacakage-private {{1在类的开头声明的字段的类型为password
,而不是double
,就像它的本地对应字段一样。您可以通过对您的班级进行以下更改来解决此问题。你的课程也有很多风格和命名问题,我已经清理过了。
int