3

私はほぼ2日間、私のものに似た質問を探していましたが、答えが見つかることを願っていますが、いいえ、できなかったので、ここで皆さんに質問することにしました.

このメソッドは、 a のすべてのキーと値を出力することHashMap<String, int[]> ratingmapです。したがって、キーはStrings で、値は配列です。私はそれに取り組んでおり、以下は私のコードです。

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: [I@4f5b571e
Customer: Sidney - Rating: [I@75b49b45
Customer: Apollo - Rating: [I@243e0b62
Customer: Leslie - Rating: [I@655d6184

評価は配列であると予想していますが、常に上記の奇妙な組み合わせとして表示されます: [I@2b9fd66a

誰かが問題を引き起こす間違いを指摘してもらえますか?

4

4 に答える 4

6

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

詳細については、こちらの回答を参照してください。

于 2012-05-08T13:49:51.143 に答える
2

値は「int[]」、int の配列です。ただし、そのオブジェクトを文字列に変換すると、配列のすべての要素が自動的に出力されるわけではありません。表示される配列のメモリ内の位置のみを出力します。

それらを印刷するには、配列の要素を反復処理する必要があります。このような:

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

または、ポールが言ったように (配列のようなヘルパー クラスを使用します)

于 2012-05-08T13:49:52.843 に答える
1

表示されるのは、組み込みのtoString整数配列型の結果です[I。たとえば、「配列の型」部分と「参照」部分が出力@75b49b45されます。これは、同じ JVM 内のインスタンスごとに異なります。

必要なのは、配列アイテムを手動で反復処理し、それぞれを個別に出力することです。

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

または、配列をListより使いやすいtoString()実装に変換することもできます。

    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ビルトインを持ち、後者が呼び出されたクラスの型コードを出力し、次にクラスのインスタンスの内部IDを出力することによって機能するためです。また、整数配列の型コードは.toStringtoString()Object@[I

Class#getName()JDKの javadoc で可能な型コードの完全な説明を参照してください。

于 2012-05-08T13:53:48.643 に答える
1

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

于 2012-05-08T13:53:51.563 に答える