2012-05-08 4 views
3

거의 2 일 동안 비슷한 질문을 시도해 보았습니다. 대답을 찾을 수 있기를 바랍니다.하지만 그렇게 할 수 없었습니다. 너희들 여기 물어봐.HashMap 값 인쇄 (해당 값은 배열) 오류

이 방법은 HashMap<String, int[]>ratingmap의 모든 키와 값을 인쇄하는 것입니다. 따라서 키는 String이고 값은 배열입니다. 나는 그 일을 해왔고 아래는 제 코드입니다. 인쇄 된 결과는 다음과 같습니다 때문에

public void showRatingsMap() { 
    for (String customer: ratingmap.keySet()) { 
     String key = customer.toString(); 
     int[] value = ratingmap.get(key); 
     System.out.println("Customer: " + key + " - Rating: " + value); 
    } 
} 

나는 순간에 정말 혼란 스러워요 :

Customer: Douglas Anderson - Rating: [[email protected] 
Customer: Sidney - Rating: [[email protected] 
Customer: Apollo - Rating: [[email protected] 
Customer: Leslie - Rating: [[email protected] 

나는 평가가 배열 될 것으로 기대하지만, 항상 이상한로 나타나는 위의 조합 : [I @ 2b9fd66a

누구든지 문제의 원인이되는 실수를 지적 할 수 있습니까?

+0

가능한 복제본 [Java에서 배열을 인쇄하는 가장 간단한 방법] (http : // stackoverflow.com/questions/409784/simple-way-to-print-and-array-in-java) – assylias

+0

"이상한 조합"은 객체 참조입니다. 어떤 유형의 객체가 ratingmap에 저장됩니까? – DrewCo

답변

6

배열은 기본값 toString() 메서드를 재정의하지 않습니다. 해당 콘텐츠의 표현을 인쇄하려면 Arrays.toString(int[])을 사용할 수 있습니다.

자세한 내용은 내 대답 here을 참조하십시오.

+0

미안하지만 나는 정말로 그것을 얻지 않는다. 왜냐하면 방금 자바를 시작했기 때문입니다. 나는 (내 코드) : value.toString (int [] 값), 시도했지만 작동하지 않습니다. – user1382202

+0

@ user1382202 코드에서'value' 대신'Arrays.toString (value)'를 사용합니다. 너의 질문. – assylias

+0

오, java.util.Arrays를 가져 오지 않았기 때문에 알아 냈습니다. :) 감사 :) – user1382202

2

값은 "int []"이며 int 배열입니다. 그러나 해당 객체를 문자열로 변환하면 배열의 모든 요소가 자동으로 인쇄되지 않습니다. 배열의 메모리에있는 위치 만 인쇄합니다. 이는 사용자가 보는 것입니다.

배열의 요소를 반복하여 인쇄해야합니다. 이처럼 :

for (int v : value) { 
    System.out.println(v); 
} 

또는 바울은

1

뭘보고하는 내장 된 정수 배열 유형에 대한 toString의 결과이다 (배열처럼 도우미 클래스를 사용) 말했듯이 - 그것은 "유형의 인쇄 배열 "[I 부분과"참조 "부분 (예 : @75b49b45)은 동일한 JVM 내에서 인스턴스별로 다릅니다.

수동 배열 항목을 반복 별도로 각을 인쇄하는 것입니다 필요가있는 무엇 :

int array[] = new int[] {3, 1, 4, 1}; 
    for (int i : array) 
     System.out.print(i + " "); 
    System.out.println(); 

을 또는 당신은 toString() 구현 더 친화적가 List에 배열을 변환 할 수 있습니다 :

int array[] = new int[] {3, 1, 4, 1}; 
    List<Integer> asList = new ArrayList<Integer>(); 

    for (int i : array) 
     asList.add(i); 
    System.out.println(asList); 

시작 지점과 관련을 왜 [I이 표시되는지에 대한 설명이 있습니다. 배열에 구현이에서 상속 된 toString이 내장되어 있기 때문입니다클래스와 후자는 호출 된 클래스의 타입 코드를 인쇄 한 다음 @ 클래스의 인스턴스 내부 ID를 사용합니다. 정수 배열의 형식 코드는 [I입니다.

JDK의 javadoc 형식 코드 유형에 대한 자세한 설명은 Class#getName()을 참조하십시오.

1

가장 간단한 해결책은 HashMap<String, List<Integer>>을 사용하는 것이므로 예상대로 인쇄됩니다.