新程序员在这里......我正在编写一个程序,它将用户的名字作为输入(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;
}
答案 0 :(得分:3)
您忘记在max = people.get(i).getMark();
语句关闭之前设置if
。
答案 1 :(得分:0)
存储max的索引而不是最大值本身。你可以从索引中找出最大值。
然后,您可以使用末尾的索引来确定名称。
答案 2 :(得分:0)
让您的people
Collection
与基于其Person
属性实施User
的自定义Comparable
或score
类进行参数化。
下面的完整示例(假设此代码在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());