2012-09-03 4 views
0

자바에서 간단한 정수 배열을 사용하여 버블 정렬을 구현하려고했습니다. 그러나 약간 문제가있는 것을 보인다. 이제 ArrayList를 사용하는 것이 최선의 선택임을 알았고 나는 그렇게 할 것입니다. 하지만 왜 간단한 정수 배열로 정렬되지 않습니다. 코드는정수 배열을 사용하는 BubbleSort

package sort; 

public class BubbleSort { 

    int array[]={1,5,3,32,54,6,87,5,1}; 
    int temp=0; 
public void enter(){ 
    for(int i=0;i<array.length;i++){ 
     for(int j=0;j<(array.length-i);j++){ 
      if(array[j]>=array[j+1]){ 


       temp=array[j]; 
       array[j]=array[j+1]; 
       array[j+1]=temp; 
       } 

     } 
    } 
} 
public void show(){ 

    for(int i:array){ 
    System.out.println(i); 
    } 
} 
public static void main(String str[]){ 

    new BubbleSort().Enter(); 
    new BubbleSort().Show(); 
} 
} 

입력과 동일한 배열을 생성합니다. 아무것도 바뀌지 않습니다. 간단한 배열과 ArrayList 또는 Vector의 차이점은 배열 크기의 동적 시간 확장을 제공한다는 것입니다. 더 많은 것이 있습니까? 나는 단순한 배열이 문자열과 같이 조작 될 때마다 다른 인스턴스를 생성한다는 것을 의미합니까? 여기서 그렇게하는 것 같습니다.

+0

이 숙제가 있습니까? –

+3

Java에서는 패키지 이름이 소문자이고 메소드 이름은 camelCase로 지정하는 것이 일반적입니다. http://docstore.mik.ua/orelly/java-ent/jnut/ch07_01.htm을 참조하십시오. Java 개발자가이를 위반하는 코드를 읽을 때 놀라 울 정도로 혼란 스럽습니다. –

+1

이것은 숙제가 아닙니다. 그리고 이클립스를 사용하고 있습니다.이 패키지에는 모든 정렬 프로그램이 있습니다. 나는 그것의 이름을 바꿀 줄 몰랐다. 나는 그것이 올바른 대회가 아니라는 것을 안다. 나는 다음 번에 그 점을 염두에 두겠다. 도움이 되었다면 고마워요. –

답변

5

문제는 BubbleSort 클래스의 인스턴스화에 이름을 지정하지 않는다는 것입니다.

new BubbleSort().Enter(); 
new BubbleSort().Show(); 

코드는 새 BubbleSort 클래스를 만들고 정렬합니다. 그리고 나서 또 다른 새로운 (완전히 분리 된) BubbleSort 클래스를 생성하고 그 클래스를 대신 표시합니다. 그리고 그것은 정렬되지 않았습니다.

당신은 당신의 변수에 이름을주고 싶다, 그래서이 같은를 표시 한 다음 정렬 할 수 있습니다 (SIB의 대답에 지적과) 보조 노트로

BubbleSort myBubbleSort = new BubbleSort(); 
myBubbleSort.Enter(); 
myBubbleSort.Show(); 

을, 당신은 할 수있다 Java Naming Conventions도 확인하고 싶습니다. 이러한 규약을 따르면 코드를 다른 Java 프로그래머가 쉽게 읽을 수 있으며 메서드 이름에 lowerCamelCase, 클래스 이름에 UpperCamelCase을 사용하는 등의 작업이 포함됩니다.

+1

고마워요 !! 나는 그것을 어떻게 놓쳤는가! –

+1

@KanwaljeetSingh [답변으로이 게시물을 표시하지 않음] (http://meta.stackexchange.com/a/5235/182862) –

5

은 하나의 인스턴스를 정렬하고 다른 인스턴스를 표시하기 때문입니다.

new BubbleSort().Enter(); 
new BubbleSort().Show(); 

사용

BubbleSort bubbleSort = new BubbleSort(); 
bubbleSort.Enter(); 
bubbleSort.Show(); 

또한 당신은 적어도 말을 Enter()show()enter()에와 Show() 이름을 변경해야합니다.

3

두 개의 서로 다른 BubbleSort 개체를 만들기 때문에 첫 번째 개체를 정렬하고 다른 개체를 표시하기 때문에.

이 있었어야

....

public static void main(String str[]){ 

    BubbleSort sort = new BubbleSort(); 
    sort.Enter(); 
    sort.Show(): 

} 
1

그리고 올바른 거품 정렬 코드는 다음과 같습니다

int temp = 0; 
    for (int i = 0; i < array.length; i++) { 
     for (int j = 1; j < (array.length - i); j++) { 
      if (array[j - 1] > array[j]) { 
       temp = array[j - 1]; 
       array[j - 1] = array[j]; 
       array[j] = temp; 
      } 

     } 
    } 

나는 다른 사람이 그것을 찾는 데 도움이되기를 바랍니다.

관련 문제