我用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"));
}
}
异常消息的屏幕截图:
答案 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 。因为您需要在运行的最开始一次性输入userName
和password
三个循环。
我通过使用hasNextLine
包裹扫描来解决这个问题,如果此扫描仪的输入中有另一行,则返回true。
所以,它变成了:
if(console.hasNextLine()){
userName = console.nextLine();
}
if(console.hasNextLine()){
password = console.nextLine();
}