1

名前と対応するスコアを降順で出力しようとしています。文字列の配列と別の整数の配列があるので、2 つの配列を関連付けようとしています。私はArrays.sortを使用し、インデックスを取得しようとしました。インデックスは、対応するスコアと同様の場所に名前を配置するために使用されます。私はこのコードを持っていますが、残念ながらあなたのアプリが停止したという実行時エラーが発生します。ここで私の目標を達成するために何をすべきか、誰か助けてもらえますか? どうもありがとう!

           int score[]= new int[4];
            score[0]= 10;
            score[1]= 50;               
            score[2]= 20;
            score[3]= 60;
           String names[] = new String[4];
            names[0]= "player1";
            names[1]= "player2";
            names[2]= "player3";
            names[3]= "player4";

            Arrays.sort(score);
            int index_array[] = new int[4];
            int m = 0;
            for(m = 0; m <4; m++){
                index_array[m]=Arrays.binarySearch(score ,score[m]);
                l = index_array[0];


            }
            for(int i = 0; i<4; i++){
                if(l == score[i]){
                    j = i;
                }
            }
            String name = names[m];
            show.setText(name + " " + Integer.toString(l));
4

3 に答える 3

2

スコアとユーザー名を関連付ける必要があります。現在、配列インデックスによってそれらを関連付けています。スコアを並べ替えると、スコアのインデックスが変わります。

次のようなものを試してください。

class Score implements Comparable<Score>
{
  int score;
  String player;

  public Score(int theScore, String thePlayer)
  {
    score = theScore;
    player = thePlayer;
  }

  public int compareTo(Score)
  {
    ... compare based on the int score value ...
  }

  ... getters.  setters optional ...
}

List<Score> scoreList = new ArrayList<Score>();

... fill scoreList with Score objects. ...

Collections.sort(scoreList);
于 2013-02-25T19:36:59.517 に答える
2

プレーヤーの名前とスコアを保持する Player モデルを作成し、Comparator を使用してプレーヤーをスコアで並べ替えます。

プレイヤーモデル:

class Player {

private String name;

private int score;

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

public String getName() {
    return name;
}

public int getScore() {
    return score;
}

public String toString() {
    return "name=" + name + "; score=" + score;
}

}

コンパレータ:

class PlayerComparator implements Comparator<Player> {
public int compare(Player p1, Player p2) {
    return p1.getScore() < p2.getScore() ? -1
            : p1.getScore() > p2.getScore() ? 1 : 0;
}

}

そして使用例:

public class PlayerTest {

public static void main(String[] args) {
    int score[]= new int[4];
    score[0]= 10;
    score[1]= 50;
    score[2]= 20;
    score[3]= 60;

    String names[] = new String[4];
    names[0]= "player1";
    names[1]= "player2";
    names[2]= "player3";
    names[3]= "player4";

    Player[] players = new Player[names.length];
    for(int i = 0; i < names.length; i++) {
        players[i] = new Player(names[i], score[i]);
    }

    Arrays.sort(players, new PlayerComparator());

}

}

于 2013-02-25T20:13:40.337 に答える
0

これはデザインの匂いです。2 つの並列配列を持つべきではありません。代わりに、各 Player が名前とスコアを持つ Player オブジェクトの配列を 1 つ持つ必要があります。

プレーヤーの配列を名前またはスコアで保存するのは非常に簡単です。

Java はオブジェクト指向言語です。オブジェクトを使用します。

public class Player
    private final String name;
    private int score;

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

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }
}

...
Player[] players = new Player[4];
players[0] = new Player("player1", 10);
...
于 2013-02-25T19:33:23.070 に答える