扫描程序 - 主题"主要"

时间:2017-06-22 02:01:12

标签: java

我用Java编写了一个非常基本的登录系统。从理论上讲,一切都应该正常运作。但是,当我运行程序并输入用户名和密码时,它会输出一个异常。

这是我的代码:

import java.util.*;

/**
 * A basic login system
 * @author Jamie <jamie@jamie.no>
 */
public class LoginSystem
{
    public static boolean isValidated = false;
    private static String userName = "";
    private static String password = "";

    public static void main(String[] args) {
    runConsole();
    }

    public static void runConsole() {
        Scanner console = new Scanner(System.in);

        for (int i = 0; i < 3 && !isValidated; i++) {
        System.out.println("You have entered the following username: ");
        userName = console.nextLine();

        System.out.println("You have entered the following password: ");
        password = console.nextLine();
        isValidated = AuthenticateUser(userName, password);
        }

        if (isValidated) {
        System.out.println("Access Granted. User is authenticated.");
        } else {
        System.out.println("Unauthorized Access.");
        }
    }

    /**
     * User authentication constructor
     * @param userName The username.
     * @param password The password.
     * @return true if user is validated.
     */
    public static boolean AuthenticateUser(String userName, String password) {
        return (userName.equalsIgnoreCase("User1") && password.equals("Pass1"));
    }
}

异常消息的屏幕截图: enter image description here

1 个答案:

答案 0 :(得分:1)

来自文档:

  

public class NoSuchElementException extends RuntimeException抛出   通过Enumeration的nextElement方法来指示存在   枚举中没有更多元素。

但是,当我在 Eclipse 上尝试您的代码时,它运行时没有错误。 但是当我在Code Playground上尝试时,它给了我同样的错误。

You have entered the following username: 
You have entered the following password: 
Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at LoginSystem.runConsole(LoginSystem.java:25)
    at LoginSystem.main(LoginSystem.java:11)

它似乎是系统中的 bug 。因为您需要在运行的最开始一次性输入userNamepassword三个循环。 我通过使用hasNextLine包裹扫描来解决这个问题,如果此扫描仪的输入中有另一行,则返回true。

所以,它变成了:

if(console.hasNextLine()){
   userName = console.nextLine();
}
if(console.hasNextLine()){
   password = console.nextLine();
}