2012-05-08 1 views
3

私はほぼ2日間鉱山に似た質問を探していますが、私は答えを見つけて欲しいと思いますが、できませんでした。みんなここで尋ねる。HashMapの値を表示する(これらの値は配列です)error

このメソッドは、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-an-array-in-java) – assylias

+0

これらの「奇妙な組み合わせ」はオブジェクト参照です。どのタイプのオブジェクトがratingmapに保存されていますか? – DrewCo

答えて

6

配列はデフォルトのtoString()メソッドをオーバーライドしません。内容の表現を印刷するには、Arrays.toString(int[])を使用できます。

詳細は、私の答えhereを参照してください。

+0

申し訳ありませんが、私は本当にそれを手に入れません。私はJavaを始めたばかりです。私は(私のコードのために):value.toString(int [] value)を試してみましたが、うまくいきません:) – 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()の実装がから継承されたtoStringが組み込まれているからですクラスであり、後者は呼び出されたクラスの型コードを出力することで動作し、次に@のクラスのインスタンスの内部IDです。整数配列の型コードは[Iです。

JDKのjavadocで使用できるタイプコードの詳細については、Class#getName()を参照してください。

1

最も簡単な解決策は、HashMap<String, List<Integer>>を使用することです。期待どおりに印刷されるからです。