我们收到了一个充满名字的.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所以这一切对我来说都很陌生
答案 0 :(得分:2)
您尝试使用Scanner
,就好像它是BufferedReader
一样,但Scanner
并不仅仅是BufferedReader
的替代品1}}。
而不是BufferedReader
- 样式代码:
while (line = input.nextLine()) != null) {
...
你需要这样做:
while (input.hasNextLine()){
line = input.nextLine();
...