将3个变量与列表2相关联

时间:2013-11-27 00:16:43

标签: java list

很抱歉双重发布,但我需要运行这个主题,因为我的上一个问题被搁置了,已经有一个小时了,请考虑这个问题,谢谢。

我正在尝试添加3个变量:2个字符串和一个Double给List,并使它们彼此对应。说,我输入1个字符串并获得一个双字符串或另一个字符串。现在,我怎么做,因为List实际上可以容纳1个变量?或者如何使用List和可能的其他方法使这3个变量相互对应?

例如:Steve Jobs 2050.5,其中Steve为a,作业为b,而2050.5为c。我输入乔布斯或史蒂夫它给了我2050.5。

以下是目前的代码:

public class Person implements Comparable<Object> {

String filename = "people.txt";
private String surname;
private String firstName;
private double salary;

private List<Person> list;

public Person(String Surname, String FirstName, double Salary){
    surname = Surname;
    firstName = FirstName;
    salary = Salary;
}

public void makeList(){
    try{
        FileReader fr = new FileReader(filename);
        BufferedReader reader = new BufferedReader(fr);
        String line = reader.readLine();
        Scanner scan = null;
        String fn = "";
        String sn = "";
        double s = 0;
        while(line != null){
            scan = new Scanner(line);
            sn = scan.next().toString();
            fn = scan.next().toString();
            s = scan.nextInt();
            check(sn);
            check(fn);
            checkd(s);
            // Methods to add
            System.out.println("Surname: " + sn +" First Name: "+ fn + " Salary:"+ s);
            line = reader.readLine();
        }
        reader.close();
    }
    catch(FileNotFoundException e){
        System.out.println("File not found: " + filename);
    }
    catch(IOException e){
        System.out.println("Can't read file: " + filename);
    }
}

public int compareTo(Object arg0) {
    return 0;
}

public String getSurname(){
    return surname;
}

public String getFirstName(){
    return firstName;
}

public double getSalary(){
    return salary;
}

public void check(String m) {
    try {
        if (m == null) {
            throw new IOException();
        }
    } catch (IOException e) {
        System.out.println("Wrong lines: " + filename);
    }
}

2 个答案:

答案 0 :(得分:0)

由于所有东西(不包括int,float ..)都是java中的对象,因此可以使用对象列表。原始变量将通过自动装箱包装到Integer,Float中,但在使用数据进行操作时,您仍然需要控制您正在操作的对象的数据类型..所以我建议您创建包含3个字段的自定义类或将所有内容转换为字符串并改用字符串列表。

答案 1 :(得分:0)

一些建议:

1)关注问题的关键所在。似乎数据结构是最重要的,而不是文件I / O部分。所以暂时忘记I / O部分。

2)将Person与包含人员的数据结构分开。那些是不同的东西。

3)考虑数据结构的接口是什么。我认为它是这样的,虽然我不是肯定的我完全理解这里的要求:

public interface PersonLookup {

    void add(Person person);

    Set<Person> get(String key); 
}

public class Person {
    private String firstName, lastName;
    private Double salary;

    public Person(String firstName, String lastName, Double salary) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.salary = salary;
    }

    ... getters ...

    ... equals() and hashCode() ...
}

4)请记住以下问题:如果两个人的名字相同或姓氏相同,会发生什么?如果某人的名字与某人的姓名相同,会发生什么?在进行查找时,客户端是否需要指明名称是第一个名称还是姓氏,或者客户端是否只是指定名称,然后数据结构必须同时搜索名字和姓氏?您对问题的回答不仅会影响数据结构的实现,还会影响界面。 (提示:想想为什么我使用上面的Set。)

祝你好运。