在数组列表中查找最大Int。但需要打印出用户名吗?

时间:2013-12-06 20:45:26

标签: java arrays list

新程序员在这里......我正在编写一个程序,它将用户的名字作为输入(String),然后是得分(Int)。然后我将它们存储到数组列表中。我想找到得分最高的用户?我需要在那里打印名称,但不确定如何做到这一点。这是我到目前为止所做的。

数组列表此信息存储在'people'中。谢谢!

public String top()
{
    String top;
    int max = Integer.MIN_VALUE;
    for(int i=0; i<people.size(); i++){
        if(people.get(i).getMark() > max){
            top = people.get(i).getName();
        }
    }


    return top;
}

5 个答案:

答案 0 :(得分:3)

您忘记在max = people.get(i).getMark();语句关闭之前设置if

答案 1 :(得分:0)

存储max的索引而不是最大值本身。你可以从索引中找出最大值。

然后,您可以使用末尾的索引来确定名称。

答案 2 :(得分:0)

让您的people Collection与基于其Person属性实施User的自定义Comparablescore类进行参数化。

下面的完整示例(假设此代码在Main类中):

public static void main(String[] args) {
    List<User> people = new ArrayList<User>();
    people.add(new User("user3023003", 1));
    people.add(new User("Chuck Norris", Integer.MAX_VALUE));
    System.out.println(Collections.max(people).name);
}

static class User implements Comparable<User> {
    String name; 
    int score;
    User(String name, int score) {
        this.name = name;
        this.score = score;
    }
    @Override
    public int compareTo(User other) {
        if (other == null) {
            return -1;
        }
        else {
            return ((Integer)score).compareTo(((User)other).score);
        }
    }
}

输出:

Chuck Norris

答案 3 :(得分:0)

您将收到错误,因为您尚未初始化top并且可能没有值。这是你在问题中提到应该的第一件事。

其次,一旦找到大于先前记录的值,就不会更改max值。将您的代码更改为:

public String top()
{
    String top = people.get(0).getMark(); // initialize it to one of the marks
    int max = Integer.MIN_VALUE;
    for(int i=0; i<people.size(); i++){
        if(people.get(i).getMark() > max){
            top = people.get(i).getName();
            max = people.get(i).getMark(); // update the max value
        }
    }
    return top;
}

答案 4 :(得分:0)

无需重新发明轮子以获得列表中的最高分。利用the APIs

这样的事情会起作用(假设你的班级被命名为Person):

Person maxMark = Collections.max(people, new Comparator<Person>(){
    @Override
    public int compare(Person arg0, Person arg1) {
        return arg0.getMark() - arg1.getMark();
    }
});

System.out.println("Person with highest mark: " + maxMark.getName() + ": " + maxMark.getMark());