2014-02-08 2 views
0
import java.util.*; 

public class Zhangbubble 
{ 
    public static void main (String[] args) 
    { 
     int Bub[] = new int[6]; 
     Random randy = new Random(); 
     boolean Done = false; 
     for (int x=0; x<6; x++) 
     { 
      Bub[x] = randy.nextInt(100); 
      System.out.println (Bub[x]); 
     } 
      System.out.println ("This is the original array"); 
      while (! Done) 
      { 
       Done = true; 
       for (int x = 0; x<Bub.length-1; x++) 
       { 
       if(Bub[x+1] > Bub[x]) 
       { 
        int temp = Bub[x]; 
        Bub[x] = Bub[x+1]; 
        temp = Bub[x+1]; 
        Done = false; 
       } 
       else 
       { 
        Done = false; 
       } 

      } 
      for(int x = 0; x<6; x++) 
      { 
       System.out.print(Bub[x]+" "); 
      } 
     } 

    } 
} 

제 프로그래밍 선생님이 부울을 사용하여 Java에서 버블 정렬을 요청했습니다. 그의 예제는 for 루프를 사용하여 while 루프의 코드를 보여줍니다. 이 코드는 배열의 숫자가 최소에서 최대까지 정렬 될 때까지 계속 정렬한다고 가정합니다. 그러나, 나는 정말로 길을 잃는다. 그리고 나는 내가 잘못 가고있는 곳을 이해할 수 없다. 어떤 도움이라도 대단히 감사하겠습니다!Java에서 boolean을 사용하는 버블 팝입니다.

+0

작업하는 것은, 당신은 당신의 코드에서 자바 규칙을 따라야 할 수 있습니다 - 변수 이름의 첫 글자-낮은 맡았다입니다 , 후속 단어의 첫 글자 만 대문자로 시작합니다. testGears - http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html#naming을 참조하십시오. 당신의 거품을 복수화하고 좀 더 기술적 인 이름을주고 싶을 수도 있습니다. 도움을 얻으려는 사람들에게 가독성을 높이는 데 도움이 될뿐만 아니라 도로를 몇 달간 자신있게 생각할 수도 있습니다. –

+2

디버거를 사용하여 코드를 단계별로 실행하거나 변수 값이있는 빈번한 인쇄 문을 삽입 해 보았습니까? 스택 오버플로 (Stack Overflow)에서 대답을 얻으려고 그 이상을 배울 것이라고 생각합니다. –

+1

디버거를 사용해 보셨습니까? 코드에 몇 가지 중단 점을 설정하고 단계별로 실행하여 실제로 수행 할 작업을 확인하십시오. 나에게 오래 동안 보지 않고, 마치 마치 if와 else 모두에서 false로 설정되었으므로 결코 완료되지 않습니다. –

답변

0

문제는 스위칭 알고리즘에 있습니다. 임시 할당을 두 번합니다.

int temp = Bub[x]; 
      Bub[x] = Bub[x+1]; 
      temp = Bub[x+1]; //Here should assign Bub[x+1] to temp 
      //Example: Bub[x+1] = temp 

편집 실제로, 정렬 알고리즘 자체에서 약간의 개선이있을 수 있습니다. 개인적으로, 나는이 방법을 좋아 :

public class Sort { 
    private static int[] array = { 3, 8, -1, 7, 0, 3 }; 

    public static void main(String[] args) { 

     for(int i = 0; i < array.length - 1; i++) { 
      for(int j = i + 1; j < array.length; j++) { 

       if(array[i] > array[j]) { 
        int temp = array[i]; 
        array[i] = array[j]; 
        array[j] = temp; 
       } 
      } 
     } 

     for(int i = 0; i < array.length; i++) { 
      System.out.println(array[i]); 
     } 
    } 
} 
+0

나는 그것을 시도했다. 그러나 그것이했던 모두는 java가 "precison의 부족"을 초래했다라고 나에게 이야기했다. – Sarah

+0

나의 편집은 지금 당신을 위해 일하고 있냐? – Josh

+0

너 내 친구가 제노아! 정말 고맙습니다!! – Sarah

0

이 힌트으로

public static void main(String[] args) { 


    int Bub[] = new int[6]; 
    Random randy = new Random(); 
    boolean Done = false; 
    for (int x=0; x<6; x++) 
    { 
     Bub[x] = randy.nextInt(100); 
     System.out.println (Bub[x]); 
    } 
     System.out.println ("This is the original array"); 
     while (! Done) 
     { 

      for (int x = 0; x<Bub.length-1; x++) 
      { 
      if(Bub[x+1] > Bub[x]) 
      { 
       int temp = Bub[x]; 
       Bub[x] = Bub[x+1]; 
       Bub[x+1]=temp ; 
       Done = false; 
      } 
      else 
      { 
       Done = false; 
      } 

     } 
     for(int x = 0; x<6; x++) 
     { 
      System.out.print(Bub[x]+" "); 
     } 
     Done = true; 
    } 


} 
+0

아니요 작동하지 않습니다 ... 전혀 ... – Sarah

+0

how ?? 바로 거품 정렬에 관한거야? – csWael

+0

예. 나는이 코드를 처음에는 거의 가지고 있었지만 작동하지 않습니다. 코드가 올바르게 보이지만 작동하지 않습니다. – Sarah