0

時間とサイズを表示するためのコードを書いています。ハッシュマップを使用してエントリを作成しています。問題は、計算が正しく行われることですが、最終的にハッシュマップを印刷しようとすると、7分間すべての結果が表示されません。代わりに、最後のエントリの結果が表示されます。 7回問題を解明するために多くのことを試みましたが、できませんでした。Plzzが助けてくれます

これが私のコードです

public class Analysis
{
    public static class KeepTime
    {
        String time;
        long TotalSize;
    }

    Main f1 = new Main();
    public static int j = 0;
    public static int check = 0;
    public HashMap<String, KeepTime> hMap_time = new HashMap<String, KeepTime>();
    public KeepTime TimerInstance = new KeepTime();

    void TimeBasedReporting()
    {
        String skey;
        String key;
        int k;
        int y;

        for (k = 1; k <= f1.Flows().size(); k++)
        {
            check = 0;
            j = 0;

            skey = Integer.toString(k);

            if (hMap_time.isEmpty())
            {
                //some code
                key = Integer.toString(hMap_time.size() + 1);
                hMap_time.put(key, TimerInstance);
                j = 1;
            }
            else if (check == 0 && j == 0)
            {
                for (y = 1; y <= hMap_time.size(); y++)
                {
                    //some code
                    }
                }
            }

            if (check == 0 && j == 0)
            {
                // some code
                key = Integer.toString(hMap_time.size() + 1);
                hMap_time.put(key, TimerInstance);
            }
            else
            {}


        }



    }
}

以下は出力です

          03:08:39,AM  424
          03:08:39,AM  424
          03:08:39,AM  424
          03:08:39,AM  424
          03:08:39,AM  424
          03:08:39,AM  424
          03:08:39,AM  424
          03:08:39,AM  424
          03:08:39,AM  424
          03:08:39,AM  424
4

3 に答える 3

2

単一のインスタンスを作成し、KeepTimeそのオブジェクトへの参照をさまざまなキーと値のペアの値として使用しています。

独立させたい場合は、新しいエントリを追加するたびに新しいインスタンスを作成する必要があります。(はい、私はあなたがここに地図を望んでいないことはほぼ間違いないというコメントに同意します-しかし、同じ参照をリストに複数回追加した場合にも同じ問題が発生します。)

于 2012-04-15T12:25:16.107 に答える
1

問題は、1つを使用していて、TimerInstanceそれを各キーのマップに配置していることです。

同じオブジェクトをすべてのキーに関連付けるので、もちろん、同じ値がマップに保存されます。

試す:

KeepTime timer = new KeepTime();

TimerInstanceforループの上部で、すべてのsを。に置き換えますtimer

TimerInstanceマップに保存するたびにオリジナルのすべてのメンバーを再評価するため、ロジックを変更することを恐れずにこれを行うことができます。

また、エントリを昇順で表示する場合、HashMapは、キーのハッシュコード(Stringこの場合)に基づいて順序付けられるため、間違った順序で表示されます。適切な順序が必要な場合は、TreeMapを使用します。デフォルトの文字列比較ではアルファベット順になります。または、独自のカスタムComparatorを指定して、必要な順序を指定することもできます。

于 2012-04-15T12:25:43.183 に答える
0

マップのエントリを反復処理する方法は、マップのmap.keySet()またはを反復処理することmap.entrySet()です。それらの1つを使用してください。

于 2012-04-15T12:23:01.003 に答える