我正在完成一项任务。对于此分配,我需要取两个名称,并针对具有名称列表的文件检查该名称。名称位于第一列。我有一个字符串设置来传递第一个问题,在方法中创建一个字符串,如果它在文件中,则分隔名称。我想要做的是创建一个循环,以便循环,重复问问题,直到它用第一个验证名称,然后在它做同样的事情后创建一个字符串。我的问题出现了,似乎陷入了无休止的循环。我希望有人能指出我正确的方向吗?
这是复制问题的可运行示例。
File.txt(这是部分的,但效果相同):
Abbie 431 552 742 924 0 0 0 0 752 644 601
Abbigail 0 0 0 0 0 0 0 0 0 953 562
Abby 0 0 0 0 0 906 782 548 233 211 209
Abdiel 0 0 0 0 0 0 0 0 0 925 721
Abdul 0 0 0 0 0 0 0 903 0 0 0
阿卜杜拉0 0 0 0 0 0 0 0 0 0 863
安倍248 328 532 764 733 0 0 0 0 0 0
Abel 664 613 626 575 542 491 497 422 381 385 354
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Program52 {
public static void main(String[] args) throws FileNotFoundException {
String firstName = getName("First name: ");
String secondName = getName("Second name: ");
}
public static String getName(String getUserName) throws FileNotFoundException {
Scanner in = new Scanner(System.in);
int count = 0;
String name = "";
boolean nameVerified = false;
while (nameVerified == false) {
File fileNames = new File("/file.txt");
Scanner scnr = new Scanner(fileNames);
System.out.print(getUserName);
String name1 = in.next();
String name2 = in.next();
while (scnr.hasNextLine()) {
String line = scnr.nextLine();
if (line.toLowerCase().startsWith(name1.toLowerCase())) {
count++;
if (count == 1) {
nameVerified = true;
System.out.println();
name = line.substring(0, line.indexOf(" "));
System.out.println(name);
}
}
}
if (nameVerified == false) {
System.out.print("Invalid. Enter another name: ");
name1 = in.next();
name2 = in.next();
}
}
return name;
}
}
答案 0 :(得分:1)
OP通过删除name2
变量和请求的第二个用户输入解决了这个问题。
这是他的修正代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Program52 {
public static void main(String[] args) throws FileNotFoundException {
String firstName = getName("First name: ");
String secondName = getName("Second name: ");
}
public static String getName(String getUserName) throws FileNotFoundException {
Scanner in = new Scanner(System.in);
int count = 0;
String name = "";
boolean nameVerified = false;
while (nameVerified == false) {
File fileNames = new File("/file.txt");
Scanner scnr = new Scanner(fileNames);
System.out.print(getUserName);
String name1 = in.next();
while (scnr.hasNextLine()) {
String line = scnr.nextLine();
if (line.toLowerCase().startsWith(name1.toLowerCase())) {
count++;
if (count == 1) {
nameVerified = true;
System.out.println();
name = line.substring(0, line.indexOf(" "));
System.out.println(name);
}
}
}
if (nameVerified == false) {
System.out.print("Invalid name.");
}
}
return name;
}
}