2012-04-25 2 views
0

Я бледный пузырьковой сортировки многомерный массив строк, но кажется, что это не работаетНужна помощь BubbleSort multiD в Java

public class Array { 
    public static void main(final String args[]) { 
     final String[][] arrDataIn = 
     { 
      { "abc", "9", "5" }, 
      { "xyz", "3", "4" }, 
      { "lmn", "7", "3" }, 
      { "hij", "1", "3" } 
     }; 

     final Array bs = new Array(); 

     final String arrSorted[][] = bs.sort(arrDataIn, 0, 1); 
     for (int y = 0; y < arrSorted.length; y++) { 
      System.out.println("Printing Row Number :" + y); 

      for (int z = 0; z < arrSorted[y].length; z++) 
       System.out.println("Value : " + arrSorted[y][z]); 
     } 
    } 

    public String[][] sort(final String arrDataIn[][], final int iCol, final int iOrder) { 
     final String arrTmp[] = new String[ arrDataIn[0].length ]; 

     for (int z = 0; z < arrDataIn.length; z++) { 
      for (int i = 0; i < arrDataIn.length - (z + 1); i++) { 
       if (arrDataIn[i].compareTo(arrDataIn[i + 1]) < 0) { 
        for (int j = 0; j < arrDataIn[i].length; j++) { 
         arrTmp[j] = arrDataIn[i][j]; 
         arrDataIn[i][j] = arrDataIn[i + 1][j]; 
        } 

        for (int m = 0; m < arrTmp.length; m++) 
         arrDataIn[i + 1][m] = arrTmp[m]; 
       } else if (arrDataIn[i].compareTo(arrDataIn[i + 1]) < 0) { 
        for (int j = 0; j < arrDataIn[i].length; j++) { 
         arrTmp[j] = arrDataIn[i][j]; 
         arrDataIn[i][j] = arrDataIn[i + 1][j]; 
        } 

        for (int m = 0; m < arrTmp.length; m++) 
         arrDataIn[i + 1][m] = arrTmp[m]; 
       } 
      } 

     } 

     return arrDataIn; 
    } 
} 

шоу Выход ошибки:

error: cannot find symbol 
if (arrDataIn[i].compareTo(arrDataIn[i+1])<0) 
       ^
    symbol: method compareTo(String[]) 
    location: class String[] 
error: cannot find symbol 
else if (arrDataIn[i].compareTo(arrDataIn[i+1])<0) 
        ^
    symbol: method compareTo(String[]) 
    location: class String[] 

Я пытаюсь изменить это:

if (arrDataIn[i][iCol] > arrDataIn[i+1][iCol] && (iOrder == 0)) 

else if (arrDataIn[i][iCol] < arrDataIn[i+1][iCol] && (iOrder == 1)) 

это по-прежнему та же ошибка

+0

Ожидаете ли вы, что он сортирует каждый столбец из массива с помощью одного сравнения? – BeRecursive

+0

Даже если это для курса, который вы посещаете, скажите своему профессору, что никто не должен когда-либо использовать сортировку пузырьков (BS). Я видел в реальном коде слишком много раз ... BS - это * никогда * вариант ... – estani

ответ

2

arrDataIn[i] является массивом строк и не compareTo() метода на массивы объекта

Прежде всего вы должны понять, что вы хотите сделать. Возможно, вы хотите отсортировать массивы lexicographically

from: 
    { 
    { "2", "4", "5" }, // if possible 
    { "3", "1" }, 
    { "2", "4" } 
    } 
to: 
    { 
    { "2", "4" }, 
    { "2", "4", "5" }, 
    { "3", "1" } 
    } 

вам просто необходимо реализовать compareTo(String[] sa1, String[] sa2) метод в соответствии с compareTo() description.

Смежные вопросы