我必须从二进制文件中读取,然后我应该按名称显示输出。
编写一个从二进制文件person.dat读取数据的程序。 (请从网站下载二进制文件。)然后,按名称按升序显示名称,年龄和性别(M - 男性,F - 女性)。
二进制文件的结构如下:
了IntVariable-TotalNumberofRecord
StringVariable-Name IntVariable-Age CharVariable-Gender
...
StringVariable-Name IntVariable-Age CharVariable-Gender
’waMohamad Ali M Siti Nuraini F Tan Mei Kuan F Mutu Samy M Alvin Tan M
============================================
这是我制作的代码。问题是我不知道如何按字母顺序对输出进行排序。请帮帮我,谢谢。
try {
ObjectInputStream inputStream = new ObjectInputStream (new FileInputStream("C:/Users/user/Desktop/person.dat"));
String input;
int age, record;
char gender;
record = inputStream.readInt();
System.out.println("Total number of records: "+record);
try{
while(true) {
input = inputStream.readUTF();
age = inputStream.readInt();
gender = inputStream.readChar();
System.out.println(input+" " +age +" " +gender);}
}catch(EOFException e){}
inputStream.close();
} catch (FileNotFoundException e) {
System.out.println("File was not found");
} catch (IOException e) {
System.out.println("Problem with file output.");
}
答案 0 :(得分:1)
要对数据进行排序,您必须先将数据放入集合(例如ArrayList
),对其进行排序,然后输出。
在将数据放入集合之前,您应该创建一个class
来将数据保存在一起。它应该是一个非常简单的类,它只接受构造函数中的名称,年龄和性别。
要让您的类的实例进行排序,请让您的类实现Comparable
接口。 .compareTo
方法可以调用与被比较的名称相同的方法。
我希望这足以理解你的其他讲义。
答案 1 :(得分:0)
为了补充9000的建议,我可以创建一个Person
类作为要添加到可排序Java集合(即List,Set等)的记录。
public class Person
{
private String name;
private int age;
private char gender
public Person(String name, int age, char gender)
{
this.name = name;
this.age = age;
this.gender = gender;
}
// omitted getters and setters
}
假设您选择List
,您可以执行以下操作:
List<Person> records = new ArrayList<Person>();
records.add(new Person("Joe", 41, M));
records.add(new Person("Anne", 23, F));
records.add(new Person("Walter", 18, M));
...
然后,您可以利用Collections.sort()
功能并根据您需要的标准对其进行排序,例如年龄(可能不完全准确):
Collections.sort(list, new Comparator<Integer>()
{
public int compare(Integer age1, Integer age2) {
return (age1 > age2 ? -1 : (age1 == age2 ? 0 : 1));
}
});
为了确保如何正确实现这一点,我建议从Oracle Java网站上查看Object Ordering上的这个Java教程。您可能需要三种Comparators
:NameComparator
,AgeComparator
和GenderComparator
。这样,您就可以按名称,年龄或性别对记录进行排序。或者,更好的是,您可以将它们组合起来,这样您就可以按名称和年龄进行排序;例如。