所以我应该做的是让这个代码搜索文件名.txt(包含大约一千个婴儿名字和他们从1900年到现在的排名)来寻找我输入的名字,并让程序打印出名称和排名。 如果文件中不存在该名称,则应该打印出诸如"找不到名称"之类的内容。 我的问题是,它要么在找到名字之前打印出大约 2k 次"未找到姓名",要么每年打印出"未找到姓名",直到我到达姓氏并意识到它不存在。然后,它会打印出 CPU 生成的错误。 我也不应该让错误只是计算机生成的错误。请帮忙。
import java.util.Scanner;
import java.io.*;
public class BabyNames {
public static void main(String[] args)
throws FileNotFoundException {
Scanner input = new Scanner(System.in);
Scanner reader = new Scanner(new File("names.txt"));
String findNameOriginal = " ";
String findName = " ";
int space = 0;
int rank = 0;
int year = 1900;
System.out.println("This program graphs the popularity of a name in 11 decades' worth of statistics recorded since the year 1900.");
System.out.print("Type a name: ");
String name = input.next();
System.out.println("nPopularity ranking of name "" + name + """);
while (!findName.equalsIgnoreCase(name)) {
findNameOriginal = reader.nextLine();
Scanner nameLine = new Scanner(findNameOriginal);
space = findNameOriginal.indexOf(" ");
findName = nameLine.next();
for (year = 1900; year <= 2000; year += 10) {
rank = nameLine.nextInt();
if (findName.equalsIgnoreCase(name)) {
System.out.println(year + ": " + rank);
} else {
System.out.println("Name not found");
}
}
}
}
}
(不确定此名称和数据链接是否有效)http://fcps.blackboard.com/@@/3773575E3802F997E96CECF10E46CA25/courses/1/030-1-348-31840002-1314-YR/content/_27024448_1/names.txt
您可以添加一个布尔值来跟踪是否找到该名称:
boolean found=false;
while ((findNameOriginal = reader.nextLine()) != null)
{
Scanner nameLine = new Scanner(findNameOriginal);
space = findNameOriginal.indexOf(" ");
findName = nameLine.next();
for (year = 1900; year <= 2000; year += 10)
{
rank = nameLine.nextInt();
if (findName.equalsIgnoreCase(name))
{
System.out.println(year + ": " + rank);
found=true;
}
}
}
if(!found) System.out.println("Name not found");
检查您的while
状况会是什么...
while (!name.trim().equals(null)) {
try{
//your code
}catch (Exception e){
}
}