【问题标题】:Ordering / Organizing Highest to Lowest string [][] after each pass每次通过后排序/组织从最高到最低的字符串 [][]
【发布时间】:2014-05-16 23:04:07
【问题描述】:

我有一个 JFrame 和一个选择图表的 JPanel。该图表有 10 个垂直位置的球员(1 个额外的菜单)和 3 个水平位置的“#”、“Name”、“Score”。 在每一回合,玩家输入他的名字,同时他的分数被保存。 我想在每轮比赛中用他/她的分数打印他/她的名字。因此,如果进行 6 场比赛,将有 6 个名字和他们的分数在他们旁边。所有都必须从高到低排序。

使用的变量有:

private int score;
private String[] playerscore = {"#","Name", "Score"};
private String[][] singleplay = {{"#","Name","Score"},{"1","----------","--"},{"2","----------","--"},{"3","----------","--"},{"4","----------","--"},{"5","----------","--"},{"6","----------","--"},{"7","----------","--"},{"8","----------","--"},{"9","----------","--"},{"10","----------","--"}};

我相信name和string必须有两个数组,用来从“singleplay”中获取所有数据并进行组织。我用过:

int [] ascore = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
String [] aname = {"","","","","","","","","",""}; 

我需要帮助整理表格,同时添加“图表已满”条件。例如:“如果分数小于 10 号玩家的分数,则什么也不做。 我有一个想法,位置 x 的内容应该保存在 ascore 和 aname 中。我尝试通过以下方式保存内容以供以后组织:

ascore [0] = Integer.parseInt(singleplay[1][2]);
aname [0] = singleplay[1][1];

在“acore”和“aname”组织之后,我将使用以下方法打印它:

singleplay[x][2] = Integer.toString(ascore[y]);
singleplay[x][1] = aname [y];

感谢您的帮助。

【问题讨论】:

  • 我不确定您到底想要做什么,但根据我收集到的信息,我有一些建议:1) 独立于 Swing 组织数据结构。当您应该使用自定义类来保存需要保持在一起的数据时,您似乎正在尝试使用并行数组。 2)考虑使用数据库来保存数据。 3) 如果需要显示表格数据并与之交互,请考虑使用 JTable。

标签: java arrays swing multidimensional-array organization


【解决方案1】:

每条记录都有一个名称和分数。您可以创建课程记录:

class Record {
  private String name;      
  private int score;

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

  public String getName(){
    return name;
  }

  public int getScore(){
    return score;
  }
}

然后您可以将这些记录保存在一个列表中,例如 ArrayList:

ArrayList<Record> records = new ArrayList<Record>();
records.add(new Record("Joe", 5));
records.add(new Record("Kathy", 7));

然后你可以对这个列表进行排序

Collections.sort(records, new GameRecordsComparator());

GameRecordComparator 在哪里:

class GameRecordComparator implements Comparable<Record> {
  @Override
  public int compare(Record r1, Record r2) {
    return r1.getScore() - r2.getScore();
  }
}

您希望最多有 10 条记录,因此在插入之前您可以检查列表大小

if (records.size()<10){
  records.add(...); // add your newly created record

} else if (records.get(9).getScore()<score) {
  // elements in a list are 0-based, 9 means 10th element
  // score is a score of a new element, which user wants to enter

  records.remove(9);
  records.add(...); // add your newly created record
  Collections.sort(records, new GameRecordsComparator());
}

【讨论】:

  • 您能否编辑您对我提出问题的方式的回答?我只想使用一个公共空白,我有我的分数和名字,但我如何按顺序显示它们?加上满点条件。只向我展示使用我的变量和显示进行组织的 for 循环。问候
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多