Java Do和While验证

时间:2015-03-20 21:08:15

标签: java validation loops

我创建了这个简单的程序,其中有一个密码,出于某种原因,如果我输入密码,程序将继续执行,即使我使用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:
     }
  }
}

3 个答案:

答案 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