2013-10-02 3 views
0

이 코드의 문제점 잘못된 출력이 나옵니다. 내가 잘못 알고하지 않습니다, 나는 당신이 나를 도울 수있는 희망 :인쇄 배열에 잘못된 출력이 표시됩니다.

public class Main{ 
    public static void main(String[] args){ 
    int[] data={11,22,33,55,22,88,99,77}; 

    SortingAlgo algo=new SortingAlgo(); 
    data=algo.selectionSort(data); 
    System.out.println("numbers are"+ data); 
    } 
} 

다른 클래스 이것은 내 아웃 넣어

public class SortingAlgo{ 
    public int[] selectionSort(int[] data){ 
    int lenD = data.length; 
    int j = 0; 
    int tmp = 0; 
    for(int i=0;i<lenD;i++){ 
     j = i; 
     for(int k = i;k<lenD;k++){ 
     if(data[j]>data[k]){ 
      j = k; 
     } 
     } 
     tmp = data[i]; 
     data[i] = data[j]; 
     data[j] = tmp; 
    } 
     return data; 
    } 
} 

:

numbers are[[email protected] 
+3

출력이 정확합니다. 당신의 기대가 잘못되었습니다. 'Object # toString()'을보십시오. –

답변

7

출력이 완전히 괜찮습니다. 배열은 toString() 메서드를 재정의하지 않으므로 Object#toString() 메서드를 호출합니다.이 메서드는 해당 종류의 표현을 생성합니다. 출력 형식이다 :

배열
getClass().getName() + '@' + Integer.toHexString(hashCode()) 

에서, Class#getName()있어서 고유 클래스 이름을 생성하기 위해 다른 요소 유형의 다른 인코딩을 사용한다. 인코딩 규칙은 문서에 명시되어 있습니다.

는 사람이 읽을 수있는 표현을 얻으려면 당신은 Arrays#toString() 방법을 사용할 수 있습니다

System.out.println("numbers are"+ Arrays.toString(data)); 
4

있으며, toString() 배열에 대한 고장을. 필요합니다

import java.util.Arrays; 

System.out.println("numbers are" + Arrays.toString(data)); 

Arrays.equals(), Arrays.hashCode()도 마찬가지입니다. Array, Arrays, ArrayUtils 클래스는 배열과 같은 기능을 추가합니다. 그러나

http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/ArrayUtils.html

http://docs.oracle.com/javase/7/docs/api/java/sql/Array.html

http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html

http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html, 당신은 당신이 정말 대신 ArrayList를 원하는 것을 찾을 수 있습니다.

+1

나는 그것을 부러라고 부르지 않을 것이다. 그것은 단지 구현되지 않았습니다. 의도적으로 나는 짐작한다. –

+0

@stonedsquirrel 어쩌면 값보다'[I @ 2e4b1dd8]을 얻는 것이 바람직한 이유가있을 수 있습니다. 그러나 나는 그것을 의심합니다. IMHO이 동작을 하위 클래스로 만드는'int []'클래스가 없기 때문에 깨졌습니다. –

+1

내가 생각할 수있는 것은 성능/출력 크기 일 것입니다. 'toString()'이 호출 될 때마다 호출되는 것이 아니라 호출되는 객체 유형이 명확합니다. 거대한 배열을 사용하면 이러한 경우에 성능이 저하되거나 로그 파일을 읽을 수 없게 될 수 있습니다. –

4

data어레이int입니다. 당신은 this way을 구현 Arrays#toString()를 사용한다 :

3860  public static String toString(int[] a) { { 
3861  if (a == null) 
3862   return "null"; 
3863  int iMax = a.length - 1; 
3864  if (iMax == -1) 
3865   return "[]"; 
3866 
3867  StringBuilder b = new StringBuilder(); 
3868  b.append('['); 
3869  for (int i = 0; ; i++) { 
3870   b.append(a[i]); 
3871   if (i == iMax) 
3872    return b.append(']').toString(); 
3873   b.append(", "); 
3874  } 
3875 } 

당신이 그것을 이해하고 있는지 확인,이 배열을 이해하는 데 도움이됩니다.

수동으로 배열 루프 및 인쇄 할 수 있습니다 :

for(int i: data) { 
    System.out.println(i + " "); 
} 

인쇄 값하는 당신이 제어 할 수 있습니다이 방법, 예를 심지어 값 : 자바에서

,이 기본 클래스 이름 표현을 toString() 방법을 표시하고있다 각 목적 : 당신이 점점 출력에 대해서는

for(int i: data) { 
    if(i % 2 == 0) { 
     System.out.println(i + " "); 
    } 
} 

이 그것에 대해 설명이다 다음에 @을 추가 한 다음 해시 코드를 추가하십시오.

관련 문제