2013-02-25 37 views
1

我试图以降序输出名称和相应的分数。有一个字符串数组和另一个整数数组,我试图将两个数组关联起来。我用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)); 
+1

post stacktrace – moDev 2013-02-25 19:28:16

+0

请发布您的LogCat输出 – h4ck3d 2013-02-25 19:28:31

+0

我相信这被称为“索引排序”。 – 2013-02-25 19:30:52

回答

1

创建持有玩家的名字播放器模型和评分,然后用比较的玩家按分数排序。

播放器型号:

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()); 

} 

}

0

这是一种设计的气味。你不应该有两个平行的数组。相反,你应该有一个Player对象的数组,其中每个Player都有一个名字和一个分数。

然后通过名称或分数存储球员阵容将非常简单。

Java是OO语言。使用对象。

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); 
... 
+0

是的,我可以这样做,但如果我将整数保存为一个字符串,我怎么能够根据分数对它进行排序?我仍然可以获取字符串行的数字部分,并根据转换为字符串的数字排列所有行吗?你能告诉我一个例子吗?谢谢@JB Nizet – chArm 2013-02-25 19:38:29

+0

你为什么要把它作为一个字符串存储?将其存储为int。我会编辑我的答案。 – 2013-02-25 19:44:13

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);