2016-02-17 2 views
1
public static Shape [] sortShapes(Shape [] shapes) { 
    int min; 
    for (int i = 0; i < shapes.length; i++) { 
     // Assume first element is min 

     min = i; 
     for (int j = i + 1; j < shapes.length; j++) { 
      if (shapes[i].compareTo(shapes[j]) == -1) { 
       Shape temp = shapes[i]; 
       shapes[min] = shapes[i]; 
       shapes[i] = temp; 

      } 
     } 


    } 
    return shapes; 
} 

Я пытаюсь написать метод, который будет сортировать формы и возвращает отсортированный массив , но выходной Doesnt дать мне что-нибудь, там нет выходаСортировка форм Метод ошибок

+0

Предложите ввести ошибки, которые вы получаете в вопросе –

+0

Используйте 'Arrays.sort (forms)'. – saka1029

ответ

0

Попробуйте заменить эти:

int temp = shapes[i] ; ** 
    ... 
    shapes[i] = temp[i] ; 

С:

Shape temp = shapes[i] ; 
    ... 
    shapes[i] = temp ; 

Поскольку температура является Shape объект.

+0

Почему бы недействительный оператор формы [forms.length] решить проблему, можете ли вы объяснить нам ??? – gpasch

+0

'shapes.length' Возвращает длину массива. Если массив имеет элементы 0-4, он вернется 5. Следовательно, вы никогда не захотите использовать '<=' в этом случае. Ваш код выкинет исключение из диапазона исключений. – Spencer4134

+0

@ Abdelhak Начало не имеет значения. Вы по существу будете называть 'array [array.length]', который будет * никогда * работать. Использование длины массива будет * всегда * возвращать еще один, чем последний элемент. – Spencer4134

1

Есть несколько ошибок в коде:

if (shapes[min].compareTo(shapes[j]) == -1) 

Договор compareTo немного отличается. Нет гарантии, что результаты равны -1, если это отрицательно.

int temp = shapes[i]; 
shapes[min] = shapes[i]; 
shapes[i] = temp[i]; 

Это, очевидно, не может работать, так как Shape! = int. Кроме того, если вы хотите поменять Shape с на позиции i и min, есть что-то не так с показателями:

Shape temp = shapes[i]; // save value at pos i 
shapes[i] = shapes[min]; // overwrite value just saved 
shapes[min] = temp; // overwrite other value with saved value 

Также return shapes; находится в неправильном положении: Вы должны гарантии, что есть return заявление или исключающее исключение для каждого возможного пути выполнения. Поэтому вам нужно поставить инструкцию в самом конце метода, а не внутри внешнего цикла for.

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