-1

いくつかの値を含む LinkedHashMap がありますが、必要な形式で印刷するのに苦労しています。サイズ整数が渡され、値を正方形形式で出力し、サイズ値までの特定のキーの値がない場合は、代わりに 0 を配置します。

これらがハッシュマップの値であるとします。最初は場所、2番目は値です

hashmap.put(1, 10); 
hashmap.put(2, 90); 
hashmap.put(4, 9); 
hashmap.put(7, 2); 
hashmap.put(11, 4); 
hashmap.put(14, 45); 

値4(高さ/幅)が渡された後、次のように印刷したいと思います。

0 10 90 0
9 0  0  2
0 0  0  4
0 0  45 0

申し訳ありませんが、これは本当にうまく説明されていません。より良い言い方がわかりません! どんな助けにも乾杯。

4

3 に答える 3

2
public static void printMapAsMatrix(Map<Integer, Integer> map, int size) {
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            Integer v = map.get(size * i + j);
            if (v == null)
                v = 0;
            System.out.printf("%1$-5s", v);
        }
        System.out.println();   
    }
}

このソリューションは、5 文字を占めるようにすべてのセルをパディングします。必要に応じてこれを変更できます。アイデアは、すべてのセル (0..size-1)x(0..size-1) をスキャンし、そのセルの値をマップから取得することによって、完全なマトリックスを作成することです。現在の行の i 行と j 項目をスキップする必要があるため、行 i と列 j は key=size * i + j に変換する必要があります。存在しないアイテムは 0 に変換されます。

于 2013-03-09T19:38:23.543 に答える
2

整数 n が与えられ、0 から n^2 までの整数を反復処理している場合。ループ内で mod を使用して、行末かどうかを判断できます。

       if((i mod n) == 0){
           //print a new line here
       }

したがって、単純に 0 から n^2 までのループを記述し、その if ステートメントを使用して次の行にいつブレークするかを判断します。

于 2013-03-09T19:33:52.937 に答える
0
public static void main(String[] args) {

        Map<Integer, Integer> hashmap = new HashMap<Integer, Integer>();
        hashmap.put(1, 10);
        hashmap.put(2, 90);
        hashmap.put(4, 9);
        hashmap.put(7, 2);
        hashmap.put(11, 4);
        hashmap.put(14, 45);

        printSquare(4, hashmap);
    }

    public static void printSquare(int dimension, Map<Integer,Integer> map){
        int grid = dimension * dimension;

        for(int x = 0; x < grid; x++){

            Integer value = map.get(x);
            value = (value == null) ? 0:value;

            if(x != 0 && x % 4 == 0){
                System.out.println("\n");
                System.out.print(value);
                System.out.print("\t");
            }else{
                System.out.print(value);
                System.out.print("\t");
            }
        }
    }
于 2013-03-09T19:42:47.520 に答える