【问题标题】:Get one of the Object from other class as Array从其他类中获取一个对象作为数组
【发布时间】:2017-02-02 01:07:44
【问题描述】:

所以我需要一个类HighscoreEntry 只保存玩家姓名和他们的分数。在另一个班级HighscoreTable 我必须列出球员的姓名和分数,并将分数从高到低排序。如何仅获取 int 分数来对其进行排序?

public class HighscoreEntry {

    private String name;
    private int score;

    public HighscoreEntry(String name, int score){
        this.name=name;
        this.score=score;
    }

    public int getScore(){
        return this.score;
    }

    public String toString(){
        return "Player: "+this.name+", score: "+this.score;
    }

}

这就是我的“入口代码”:

public class HighscoreTable {

    private HighscoreEntry [] player;

    public HighscoreTable(HighscoreEntry [] p){
        player = new HighscoreEntry[p.length];
        for(int i=0;i<p.length;i++){
            player[i]=p[i];
            if (player.getScore()[i]>player.getScore()[i+1]){
                // i wanted here to sort out the score only  but it doesn't work with getScore()
            }
        }
    }

}

【问题讨论】:

  • playerarray,我猜你想以player[i].get.... 访问数组元素

标签: java


【解决方案1】:

您错误地访问了数组。不能对数组调用非数组方法。

if (player.getScore()[i]>player.getScore()[i+1])

变量player 是一个数组,因此您不能在其上调用getScore。您必须先使用player[i] 访问该对象,然后像这样调用该方法

player[i].getScore();

【讨论】:

  • @AJPermadi 好的,你也可以接受答案。
  • 我做到了,不过我还有另一个问题,所以我做到了public HighscoreTable(HighscoreEntry [] p){ player = new HighscoreEntry[p.length]; for(int i=0;i&lt;p.length;i++){ player[i]=p[i]; if(player[i].getScore()&lt;player[i+1].getScore()){ int tmp = 0; tmp=player[i].getScore(); player[i].getScore()=player[i+1].getScore(); player[i+1].getScore()=tmp; } } 但它在最后两行显示:左侧必须是可变的。我知道这意味着什么,但我认为 player[i].getScore 已经是一个变量了?
  • @AJPermadi 这是一个不同的问题。简而言之 - 不,这不是一个变量。
【解决方案2】:

您不能访问这样的数组索引。

player.getScore()[i]>player.getScore()[i+1]

需要成为

player[i].getScore() > player[i+1].getScore()

如果没有任何条件检查您是否在最后一个索引处,我也不会去访问这样的索引。

player[i+1].getScore() 

可能导致越界异常。

【讨论】:

  • 哦,是的!我会比较它直到 i-2 然后 :D 谢谢你!
【解决方案3】:

正如 Murat K. 在他的回答中所说,您以错误的方式访问数组。但是你的排序算法无论如何都行不通。虽然实现对数组进行排序的算法相当容易,但我建议在 Java 中使用“默认”方式,利用 Collection Framework:

不要将HighscoreEntrys 保存在数组中,而是将它们存储在列表中,例如一个ArrayList。然后让HighscoreEntry 实现ComparableHighscoreEntry 的代码如下所示:

public class HighscoreEntry implements Comparable<HighscoreEntry> {

    private int score;

    public int compareTo(HighscoreEntry he) {
        return score - he.score;
    }

    [other code]

}

然后您可以对您的条目进行排序,如下所示:

List<HighscoreEntry> list = Arrays.asList(player);
Collections.sort(list);

【讨论】:

  • 非常感谢!但是我们还没有那么远,我们仍然在章节顶部和继承类中,所以我们必须从头开始编写它:b
猜你喜欢
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 2022-07-26
  • 2018-04-26
  • 2020-10-13
  • 2022-01-10
相关资源
最近更新 更多