如何按名称显示输出

时间:2014-11-12 15:51:23

标签: java

我必须从二进制文件中读取,然后我应该按名称显示输出。

问题:

编写一个从二进制文件person.dat读取数据的程序。 (请从网站下载二进制文件。)然后,按名称按升序显示名称,年龄和性别(M - 男性,F - 女性)。

二进制文件的结构如下:

  

了IntVariable-TotalNumberofRecord

     

StringVariable-Name IntVariable-Age CharVariable-Gender

     

...

     

StringVariable-Name IntVariable-Age CharVariable-Gender

这是二进制文件(person.dat)

中的内容
  

¬í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.");
}

2 个答案:

答案 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教程。您可能需要三种ComparatorsNameComparatorAgeComparatorGenderComparator。这样,您就可以按名称,年龄或性别对记录进行排序。或者,更好的是,您可以将它们组合起来,这样您就可以按名称和年龄进行排序;例如。