所以我应该这样做有这个代码搜索文件names.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
答案 0 :(得分:1)
您可以添加一个跟踪是否找到名称的布尔值:
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");
答案 1 :(得分:0)
检查while
条件将会是什么......
while (!name.trim().equals(null)) {
try{
//your code
}catch (Exception e){
}
}