如何写循环条件

时间:2015-05-14 19:33:39

标签: java loops

程序要求输入密码,然后你输入密码,否则你会得到3次尝试,如果你失败了3次,它会锁定(理论上)。

问题:

  1. 我应该如何编写while循环,现在它只是说" Line无法解析为变量"我不知道如何解决这个问题。

  2. 减去尝试也不起作用。我该怎么写呢?

  3. 以下是代码:

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

5 个答案:

答案 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循环条件中同时使用correctPassline,但它们分别在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)

  1. 您在while语句之后初始化String变量,因此在评估第一个条件时line不存在