如何使NoSuchElementException不显示并将其替换为我自己的错误消息

时间:2014-02-22 16:23:12

标签: java

所以我应该这样做有这个代码搜索文件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

2 个答案:

答案 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){

    }
  }
相关问题