2016-05-30 3 views
-1

Ну, я пробовал это некоторое время, и я не могу понять это. В основном моя проблема заключается в том, когда код работает и достигает первого if (Bubblesort.get(j)) автоматически переходит на другой if, не изменяя значения и повторяя, пока не будет отсортировано. Есть идеи ?Метод bubblesort (Домашнее задание)


package APS; 
import java.util.ArrayList; 
import APS.RandomArray; 
public class BubbleSort { 

    BubbleSort(){ 
     RandomArray Ordenar = new RandomArray(); 
     ArrayList<Integer> Bubblesort = Ordenar.vetores(); 
     boolean controle; 

     for (int i = 0; i < Bubblesort.size()-1; i++){ 
      controle = true; 
      for (int j =0; j < (Bubblesort.size()-i); j++){ 
       if (Bubblesort.get(j).compareTo(Bubblesort.get(j+1))>0){ 
        Integer a = Bubblesort.get(j); 
        Bubblesort.set(i, Bubblesort.get(j+1)); 
        Bubblesort.set(j+1, a); 
        controle = false; 
       } 
       if (controle){ 
        break; 
       } 

      } 

     } 
     for(int i = 0; i < Bubblesort.size();i++){ 
      System.out.println(Bubblesort.get(i)); 
     } 

    } 
} 
+1

Теперь, когда я ** фиксированный ваши углубления **, вы можете увидеть проблемы: 'если (Контрол)' заявление должно быть * вне * внутренний цикл. – Andreas

+0

Кроме того, первый 'Bubblesort.set (' должен быть 'set (j,', а не 'set (i,' и ваш цикл 'for (int j' должен быть' j <(Bubblesort.size() - i-1) '. – Andreas

+0

Спасибо. Теперь он входит в цикл, но все еще не отсортирован:/ –

ответ

0

Ваш код, со следующими изменениями, первые три, как описано в предыдущих комментариях, и один для создания кода MCVE (Minimal, Complete, and Verifiable):

  • перемещена if (controle) за пределы внутреннего контура.
  • Изменено Bubblesort.set(i, по Bubblesort.set(j,.
  • Изменено j < (Bubblesort.size()-i) по j < (Bubblesort.size()-i-1).
  • MCVE: Изменен ArrayList<Integer> Bubblesort как параметр.
class BubbleSort { 
    BubbleSort(ArrayList<Integer> Bubblesort){ 
     boolean controle; 

     for (int i = 0; i < Bubblesort.size()-1; i++){ 
      controle = true; 
      for (int j =0; j < (Bubblesort.size()-i-1); j++){ 
       if (Bubblesort.get(j).compareTo(Bubblesort.get(j+1))>0){ 
        Integer a = Bubblesort.get(j); 
        Bubblesort.set(j, Bubblesort.get(j+1)); 
        Bubblesort.set(j+1, a); 
        controle = false; 
       } 
      } 
      if (controle){ 
       break; 
      } 
     } 
     for(int i = 0; i < Bubblesort.size();i++){ 
      System.out.println(Bubblesort.get(i)); 
     } 
    } 
} 

TEST

new BubbleSort(new ArrayList<>(Arrays.asList(1,5,2,4,3))); 

ВЫВОД

1 
2 
3 
4 
5 

Это выглядит как хороший-то для меня.

+0

Большое спасибо. Это работает :) –

+0

Я уже сделал это, но мне нужно 15 баллов репутации, чтобы показать:/Извините, что –

+0

@WandersonCosta Это все хорошо Просто хочу сообщить вам, так как вы новичок здесь. :-) Добро пожаловать в StackOverflow. – Andreas

-1

ваш забыл изменить Контрол state.just добавить заявление controle = true во втором, если до break;

class BubbleSort { 
    BubbleSort(ArrayList<Integer> 

BubbleSort) { булевой Controle;

for (int i = 0; i < Bubblesort.size()-1; i++){ 
     controle = true; 
     for (int j =0; j < (Bubblesort.size()-i-1); j++){ 
      if (Bubblesort.get(j).compareTo(Bubblesort.get(j+1))>0){ 
       Integer a = Bubblesort.get(j); 
       Bubblesort.set(j, Bubblesort.get(j+1)); 
       Bubblesort.set(j+1, a); 
       controle = false; 
      } 
     } 
     if (controle){ 
      controle = true; 
      break; 
     } 
    } 
    for(int i = 0; i < Bubblesort.size();i++){ 
     System.out.println(Bubblesort.get(i)); 
    } 
} 

}

+0

Какова цель: «если contrel истинно, установите его в true»? – Andreas

+0

/\ Что он сказал, если (controle) уже означает, что это правда –

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