2013-11-28 3 views
0

학생들의 이름과 학생 배열이있는 단일 배열이 있는데, 이름을 잘 정렬 할 수 있지만 일치시킬 점수를 얻을 수는 없습니다. 같은 순서). 당신이 이름을했던 것처럼두 번째 배열과 일치하는 배열 다차원 배열

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

모든 여기 내 시도 코드 그 이유는 당신이 그 이름과 그 표식을 지닌'Student' 객체를 만들고 싶지 않기 때문입니다. 그리고 나서 crea 'Student []'배열로'Comparator'를 사용하여 이름으로 정렬 하시겠습니까? –

+0

비 OO 방법으로 제한됩니다 – Colin747

+0

'compareTo'는 OO 메소드입니다 ... – brimborium

답변

3

당신은 단지 마크를 배열을 교체해야합니다 :

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]] 
+0

'intSwap'을 배열로 변경 한 이유를 설명 할 수 있습니까? – Colin747

+1

@ Colin747 처음에는 각 표식 배열이 문자열 배열과 동일한 인덱스 위치로 연관되기 때문에? 따라서 배열에서 두 개의 이름을 바꾼다면 해당 마크 배열도 바꿀 수 있습니다. –

+0

나는 당신이 왜 그것을했는지 의문을 제기하지 않았고, 나는 그저 무슨 일이 벌어지고 있는지 정확하게 이해하고 싶었고, 당신의 솔루션은 훌륭하게 작동했습니다. 감사합니다. – Colin747