数组排序多维数组赛第二阵列 [英] array sort multidimensional array to match second array

查看:109
本文介绍了数组排序多维数组赛第二阵列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有学生姓名的单一demenational阵列,并与学生标记的二维数组,我的名字排序不错,但我不能让标记匹配(因为他们必须留在相同的顺序)。这是我尝试code:

 静态的String [] = studentNamesArray新的String [10];
静态INT [] [] studentMarksArray =新INT [10] [3];  静态无效sortAlphabetical(){
    串tempName;
    INT intSwap;
    布尔标志= FALSE;
    而(标志== FALSE){
      标志=真实的;
      的for(int i = 0; I< 9;我++){
        如果(studentNamesArray [I] .compareTo(studentNamesArray第[i + 1])大于0){
          tempName = studentNamesArray [I]
          studentNamesArray [I] = studentNamesArray第[i + 1];
          studentNamesArray [I + 1] = tempName;          为(中间体Y = 0; Y 2; Y ++){
          intSwap = studentMarksArray [I] [0];
          studentMarksArray [I] [Y] = studentMarksArray [I + 1] [Y + 1];
          studentMarksArray [I + 1] [Y + 1] = intSwap;
          }
          标志= FALSE;
        }
      }
    }
  }


解决方案

您只需要像你这样的名称来交换标记数组:

 静态无效sortAlphabetical(){
        串tempName;
        INT [] intSwap; //< - 注意我改变了这个作为一个int []数组
        布尔标志= FALSE;
        而(标志== FALSE){
          标志=真实的;
          的for(int i = 0; I< studentNamesArray.length-1;我++){//< - 注意我改变了这种长度 - 1,避免IndexOutOfBoundsException异常
            如果(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;
              标志= FALSE;
            }
          }
        }
      }


 静态的String [] = studentNamesArray新的String [3];
    静态INT [] [] studentMarksArray =新INT [3] [3];    公共静态无效的主要(字串[] args)抛出java.lang.Exception的{
        studentNamesArray [0] =标记;
        studentNamesArray [1] =安娜;
        studentNamesArray [2] =阿诺德;        studentMarksArray [0] = INT新[] {1,2,3};
        studentMarksArray [1] =新INT [] {4,5,6};
        studentMarksArray [2] = INT新[] {0,0,0};        sortAlphabetical();
        的System.out.println(Arrays.toString(studentNamesArray));
        的System.out.println(Arrays.deepToString(studentMarksArray));    }

输出:

  [安娜,阿诺德,马克]
[[4,5,6],[0,0,0],[1,2,3]]

I have a single demenational array with student names and a 2D array with student marks, I can sort the names fine but I cannot get the marks to match (as they have to stay in the same order). Here is my attempted code:

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

解决方案

You just have to swap the marks arrays like you did for the names :

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

    }

Output :

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

这篇关于数组排序多维数组赛第二阵列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆