NoSuchElementException是什么意思以及如何解决?

时间:2017-07-06 01:32:30

标签: java sorting exception alphabetical nosuchelementexception

我们收到了一个充满名字的.txt文件,并被要求按姓氏的字母顺序排列这些名字(奖金,如果我们也可以按名字排序)。我们的任务是创建三个不同的文件:Person,SortName和SortNameApp。

我们必须使用

 Scanner input=new Scanner(new File(args[0])); 

查找文件而不是使用BufferedReader。

这是我到目前为止所完成的内容

人:

class Person {
String firstName;
String lastName;
}

SortNames:

class SortNames {

void sortNames(Person[] arr, int type) {
    if (type == 1) {
       int j;
       boolean flag = true; // will determine when the sort is finished
       Person temp;
       while (flag) {
           flag = false;
           for (j = 0; j < arr.length - 1; j++) {

               if (arr[j].lastName
                       .compareToIgnoreCase(arr[j + 1].lastName) > 0) { // ascending
                                                                           // sort
                   temp = arr[j];
                   arr[j] = arr[j + 1]; // swapping
                   arr[j + 1] = temp;
                   flag = true;
               }
           }
       }
       for (int k = 0; k < arr.length; k++)
           System.out.println(arr[k].firstName +"<-->"+arr[k].lastName);
   } else if (type == 2) {

       int j;
       boolean flag = true; // will determine when the sort is finished
       Person temp;
       while (flag) {
           flag = false;
           for (j = 0; j < arr.length - 1; j++) {

               if (arr[j].firstName
                       .compareToIgnoreCase(arr[j + 1].firstName) > 0) { // ascending
                                                                           // sort
                   temp = arr[j];
                   arr[j] = arr[j + 1]; // swapping
                   arr[j + 1] = temp;
                   flag = true;
               }
           }
       }
       for (int k = 0; k < arr.length; k++)
           System.out.println(arr[k].firstName +"<-->"+arr[k].lastName);
   }
  }

}

SortNameApp:

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

public class SortNameApp {

  public static void main(String[] args) throws IOException {
   Scanner reader;

   try {

       Scanner input =new Scanner(new File(args[0]));
       int namesCount = Integer.parseInt(input.nextLine().trim());
       Person[] arr = new Person[namesCount];
       String line = null;
       int i = 0;
       while ((line = input.nextLine()) != null) {
           Person person = new Person();
           // System.out.println(line);
           person.firstName = line.split(" ")[0];
           person.lastName = line.substring(person.firstName.length(),
                   line.length()).trim();
           arr[i] = person;
           System.out.println(arr[i].firstName +" "+arr[i].lastName);
           i++;
       }
       System.out.println("---------------------");
       new SortNames().sortNames(arr, 1);// sort by last name
       System.out.println("---------------------");
       new SortNames().sortNames(arr, 2);// sort by first name
   } catch (FileNotFoundException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
   }
  }
 }

如您所见,此处的行打印出文本文件,

System.out.println(arr[i].firstName +" "+arr[i].lastName);

但是当把排序算法应用到我留下的代码

Exception in thread "main" java.util.NoSuchElementException: No line found 
 at java.util.Scanner.nextLine(Unknown Source) 
 at SortNameApp.main(SortNameApp.java:16) 

我的问题是这究竟是什么意思,有什么办法可以解决它?我真的很抱歉,如果这是一个基本的知识问题,但我是一个全新的java所以这一切对我来说都很陌生

1 个答案:

答案 0 :(得分:2)

您尝试使用Scanner,就好像它是BufferedReader一样,但Scanner并不仅仅是BufferedReader的替代品1}}。

而不是BufferedReader - 样式代码:

while (line = input.nextLine()) != null) {
    ...

你需要这样做:

while (input.hasNextLine()){
    line = input.nextLine();
    ...