gpt4 book ai didi

java - 扫描仪无法正常工作

转载 作者:行者123 更新时间:2023-12-02 06:53:39 25 4
gpt4 key购买 nike

各位程序员,大家好。我还有另一个问题令我困惑。我试图接收来自用户的输入,但总是收到“java.util.NoSuchElementException:未找到行”。我已经尝试了所有我搜索过的方法,但没有运气。这是我的代码:

import java.util.Scanner;
import java.io.*;

public class UserLog {
static String username;
static String password;
static String passcompare;
static File name;
static String Userfile = "username-";
static String Passfile = "password-";

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

public static void menu(){
boolean call = false;
try (Scanner in = new Scanner(System.in)) {
do {
System.out.println("Select an option: ");
System.out.println("1: New account \n"
+ "2: Existing account");
System.out.print("-");
int choice = in.nextInt();
in.nextLine();

switch(choice) {
case 1:
call = true;
System.out.println("\nNew account called\n");
userCreate();
break;
case 2:
call = true;
System.out.println("\nExisting account called\n");
login();
break;
default:
System.out.println("\nNot a valid option\n");
}
} while(!call);
in.close();
}
catch(Exception ex) {
System.out.println("Exception Text: " + ex);
}
}

static void login(){
try (Scanner in = new Scanner(System.in)) {
System.out.println("LOGIN SCREEN\n");
System.out.print("Username: ");

username = in.nextLine();
name = new File("user-" + username + ".txt");
if(name.exists()) {
System.out.println("Username exists");

System.out.print("Password: ");

password = in.nextLine();
//scans userfile for password
if(password.length() != 0 && password.length() >= 8 /* and password-username match */) {
System.out.println("Login successful");
in.close();
}
}

else {
System.out.println("Username doesn't exist in system");
System.out.println("Would you like to create this user? (y/n)");
System.out.print("-");

char choice = (char)System.in.read();

switch(choice) {
case 'Y':
case 'y':
System.out.println("Creating user " + username);
name = new File("user-" + username + ".txt");
name.createNewFile();
System.out.println("User created");
passCreate(name);
in.close();
break;
case 'N':
case 'n':
System.out.println("Denied creation of user");
in.close();
break;
default:
System.out.println();
}
}
in.close();
} catch (IOException ex) {
System.out.println("Exception Text: " + ex);
}
}

private static File nameCreate() {
try (Scanner user = new Scanner(System.in)) {
System.out.print("Enter Username: ");

username = user.nextLine();
name = new File("user-" + username + ".txt");

if(!name.exists()) {
name.createNewFile();
try (FileWriter fw = new FileWriter(name)) {
fw.write(Userfile + username + "\n");
fw.write(Passfile);
fw.flush();
fw.close();
}
catch(Exception ex) {
System.out.println("Exception Text: " + ex);
}

//puts lines of text in the file-
//username-"username"
//password-
//
System.out.println("User Created\n");
}
else if(name.exists()) {
System.out.println("User already exists\n");
nameCreate();
}
user.close();
}
catch(Exception ex) {
System.out.println("Exception Text: " + ex);
}
return name;
}

private static void passCreate(File user) {
username = user.toString();
System.out.println(username + "\n");

boolean code = false;

try (Scanner pass = new Scanner(System.in)) {
do{
//opens file and reads until line "password-" and appends it with created password once confirmed
System.out.println("Create a password");
System.out.print("Password: ");
password = pass.nextLine();

if(password.length() >= 8) {
System.out.print("Confirm Password: ");
passcompare = pass.nextLine();

if(password.equals(passcompare)) {
code = true;
System.out.println("Passwords match\n");
//stores password
}
else {
System.out.println("Passwords don't match\n");
}
}
else {
System.out.println("Password needs to be longer than 8 characters\n");
}

}while(!code);
pass.close();
}
catch(Exception ex) {
System.out.println("Exception Text: " + ex);
}
}

private static void userCreate() {
nameCreate();
passCreate(name);
}
}

我知道这很丑陋且不完整,但这个问题让我无法继续前进。如果我通过现有用户选项并以这种方式创建用户,我就可以创建密码,但如果我尝试创建新用户,我会得到无行异常。我的问题是:如何创建更多行供扫描仪用来创建密码,或者我还有哪些其他选项来完成此任务。我尝试过 hasNextLine() ,这让我意识到没有更多的行了。谢谢

最佳答案

关闭 Scanner 实例会导致底层 InputStream 关闭,并导致在后续读取时引发 NoSuchElementException 。除非您希望后续读取失败,否则无需关闭 Scanner

  • 创建一个用于所有方法的 Scanner 实例。
  • 不要关闭扫描仪
  • Java 是一种OO 语言。使用非静态方法。

结果:

public class UserLog {
private String username;
// more variables...

private final Scanner in;

public UserLog() {
in = new Scanner(System.in);
}

public static void main(String[] args) {
UserLog userLog = new UserLog();
userLog.showMenu();
}

public void menu() {
boolean call = false;

do {
try {
System.out.println("Select an option: ");
System.out.println("1: New account \n" + "2: Existing account");
System.out.print("-");
int choice = in.nextInt();
in.nextLine();

switch (choice) {
case 1:
call = true;
System.out.println("\nNew account called\n");
userCreate();
break;
case 2:
call = true;
System.out.println("\nExisting account called\n");
login();
break;
default:
System.out.println("\nNot a valid option\n");
}

} catch (InputMismatchException e) {
System.out.println("Invalid option " + in.nextLine());
}
} while (!call);
}
...
}

关于java - 扫描仪无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17692822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com