【问题标题】:Sort multiple arrays at once by using their index numbers?使用索引号一次对多个数组进行排序?
【发布时间】:2016-02-27 08:09:25
【问题描述】:

我正在制作一个小测验程序,它从 txt 文件中读取单行答案并将它们放入单独的数组中,其中一个是名称。

我正在尝试使用它们的索引号一次对多个数组进行排序。我可以对名称进行排序,但答案本身不会排序,例如:

本:

一个

C

艾丹:

B

F

我可以改变他们名字的顺序,但不知道如何把他们的答案带到他们身边。有什么建议吗?

这是我目前的代码:

String[] names = new String[4];
String[] answersA = new String[7];
String[] answersB = new String[7];
String[] answersC = new String[7];
String[] answersD = new String[7];
String[] answersE = new String[7];
String[] answersF = new String[7];

try {
    Arrays.sort(names);
} catch (NullPointerException e) {
    System.out.println("meh");
}
for (int i = 0; i < names.length; i++) {
    System.out.println(names[i]);
    System.out.println(answersA[i]);
    System.out.println(answersB[i]);
    System.out.println(answersC[i]);
    System.out.println(answersD[i]);
    System.out.println(answersE[i]);
    System.out.println(answersF[i]);
}

【问题讨论】:

  • 了解类和对象。你不想要 7 个数组。您需要一个 Player 对象数组,其中每个 Player 对象都有一个名称和 6 个答案。然后你可以按名字对玩家进行排序。

标签: java arrays sorting


【解决方案1】:

如果您的程序中有数据在逻辑上分组在一起,并且内聚单元具有语义值,则表示程序中的"object"。对象可以包含各种类型的数据,甚至包括其他对象。

在这个场景中,您描述了一个学生(有一个名字)以及他们对各种测验问题的回答。这里的 OOP 方法是对封装这些数据点的 Student 类进行建模,而不是尝试彼此独立地操作它们。一个有用的练习是考虑您的程序将要解决的所有问题,并考虑哪些类型的事物构成了该问题。你可以有一个Student 类和一个Answer 类来解决你当前的问题。你的学生有一个名字(只是纯文本)和一系列答案(你可以使用一个数组,尽管Java List API 通常更容易使用)。如果您想跟踪问题陈述及其正确答案,您还可以有一个 Question 类。

如果您仍然需要对学生进行排序的能力,例如,根据他们在测验中的表现,您可以使用Comparator。找到如何使用它的示例应该不难。您还可以让您的Student 类实现Comparable 接口,以便按名称对学生进行排序。这将允许您使用Collections.sort 方法非常轻松地对您的学生收藏进行排序。

【讨论】:

    【解决方案2】:

    如果你可以使用数组列表,下面的例子会很有用:

    List<Integer> ids = Arrays.asList(0, 1, 2, 3);
    List<String> colors = Arrays.asList("blue", "yellow", "red", "black");
    List<String> clothes = Arrays.asList("shoes", "pants", "boots", "coat");
    

    //按ID排序

    concurrentSort(ids, ids, colors, clothes);
    

    // 按颜色排序

    concurrentSort(colors, ids, colors, clothes);
    

    // 按衣服排序

    concurrentSort(clothes, ids, colors, clothes);
    

    并发排序函数在:

    https://ideone.com/cXdw6T

    与此类似,您可以根据名称对答案列表进行排序。

    【讨论】:

      猜你喜欢
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 2015-08-27
      • 2018-05-17
      • 2021-01-13
      • 2022-09-23
      相关资源
      最近更新 更多