Java 无接触异常是什么意思?如何解决?

Java 无接触异常是什么意思?如何解决?,java,sorting,exception,alphabetical,nosuchelementexception,Java,Sorting,Exception,Alphabetical,Nosuchelementexception,我们得到了一个满是名字的.txt文件,并被要求按姓氏的字母顺序排列这些名字(如果我们也能按名字排序的话,这是额外的)。我们的任务是创建三个不同的文件:Person、SortName和SortNameApp 我们必须使用 Scanner input=new Scanner(new File(args[0])); 查找文件而不是使用BufferedReader 到目前为止,我已经完成了每项工作 人: class Person { String firstName; String lastNam

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

我们必须使用

 Scanner input=new Scanner(new File(args[0])); 
查找文件而不是使用BufferedReader

到目前为止,我已经完成了每项工作

人:

class Person {
String firstName;
String lastName;
}
索特纳姆斯:

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);
   }
  }

}
如您所见,这里的这一行按原样打印文本文件

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还是新手,所以所有这些对我来说都是陌生的

你试图使用
扫描仪
,就像它是
缓冲阅读器一样,但是
扫描仪
不仅仅是
缓冲阅读器
的替代品

而不是
BufferedReader
-样式的代码:

while (line = input.nextLine()) != null) {
    ...
您需要这样做:

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

args[0]
的值是多少(即它是否是应用程序目录中存在的文件名)?您需要检查
input.hasNextLine()
。哪一行是第16行?大多数代码和标记与问题无关。顺便说一句。下次尝试发布一个。另请参阅:“。此外。。。我认为不能返回
null
while (input.hasNextLine()){
    line = input.nextLine();
    ...