【问题标题】:array sort multidimensional array to match second array数组排序多维数组以匹配第二个数组
【发布时间】:2013-12-14 17:45:21
【问题描述】:

我有一个包含学生姓名的单一贬义数组和一个包含学生分数的二维数组,我可以很好地对名称进行排序,但我无法让分数匹配(因为它们必须保持相同的顺序)。这是我尝试的代码:

static String[] studentNamesArray = new String[10];
static int[][] studentMarksArray = new int[10][3];

  static void sortAlphabetical() { 
    String tempName;
    int intSwap;
    boolean flag = false;
    while (flag==false) {
      flag = true;
      for (int i = 0; i < 9; i++) {
        if (studentNamesArray[i].compareTo(studentNamesArray[i + 1])>0) {
          tempName = studentNamesArray[i];
          studentNamesArray[i] = studentNamesArray[i + 1];
          studentNamesArray[i + 1] = tempName;

          for(int y=0;y<2;y++){
          intSwap = studentMarksArray[i][0];
          studentMarksArray[i][y] = studentMarksArray[i+1][y+1];
          studentMarksArray[i+1][y+1] = intSwap;
          }
          flag = false;
        }
      }
    }
  }

【问题讨论】:

  • 有什么理由不想创建一个包含其名称和标记的Student 对象,然后创建一个Student[] 数组并使用Comparator 按名称对其进行排序?跨度>
  • 我仅限于非 OO 方法
  • compareTo 是一种面向对象的方法...
  • 我的意思是我不能有单独的类文件

标签: java arrays sorting multidimensional-array


【解决方案1】:

您只需要像为名称所做的那样交换标记数组:

static void sortAlphabetical() { 
        String tempName;
        int [] intSwap; //<-- note I changed this as an int[] array
        boolean flag = false;
        while (flag==false) {
          flag = true;
          for (int i = 0; i < studentNamesArray.length-1; i++) { //<-- note I changed this to length - 1 to avoid IndexOutOfBoundsException
            if (studentNamesArray[i].compareTo(studentNamesArray[i + 1])>0) {
              tempName = studentNamesArray[i];
              studentNamesArray[i] = studentNamesArray[i + 1];
              studentNamesArray[i + 1] = tempName;

              intSwap = studentMarksArray[i];
              studentMarksArray[i] = studentMarksArray[i+1];
              studentMarksArray[i+1]= intSwap;
              flag = false;
            }
          }
        }
      }

    static String[] studentNamesArray = new String[3];
    static int[][] studentMarksArray = new int[3][3];

    public static void main (String[] args) throws java.lang.Exception {
        studentNamesArray[0] = "Mark";
        studentNamesArray[1] = "Anna";
        studentNamesArray[2] = "Arnold";

        studentMarksArray[0] = new int[]{1,2,3};
        studentMarksArray[1] = new int[]{4,5,6};
        studentMarksArray[2] = new int[]{0,0,0};

        sortAlphabetical();
        System.out.println(Arrays.toString(studentNamesArray));
        System.out.println(Arrays.deepToString(studentMarksArray));

    }

输出:

[Anna, Arnold, Mark]
[[4, 5, 6], [0, 0, 0], [1, 2, 3]]

【讨论】:

  • 您能解释一下为什么将intSwap 更改为数组吗?
  • @Colin747 因为最初每个标记数组都关联为与字符串数组相同的索引位置,对吗?所以如果你交换数组中的两个名字,你也交换了它们对应的标记数组。
  • 我不是在问你为什么这样做,我只是想确保我正确理解发生了什么,你的解决方案效果很好,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 2023-04-10
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
相关资源
最近更新 更多