17

二次元配列で困っています。次のような表示をしています。

1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 . . . etc

基本的に私が欲しいのは、それを次のように表示することです:

1 2 3 4 5 6     7  
8 9 10 11 12 13 14  
15 16 17 18 19 20  
21 22 23 24 ... etc

これが私のコードです:

    int twoDm[][]= new int[7][5];
    int i,j,k=1;

        for(i=0;i<7;i++){
            for(j=0;j<5;j++) {
             twoDm[i][j]=k;
                k++;}
        }

        for(i=0;i<7;i++){
            for(j=0;j<5;j++) {
                System.out.print(twoDm[i][j]+" ");
                System.out.print("");}
        }
4

15 に答える 15

13
public class FormattedTablePrint {

    public static void printRow(int[] row) {
        for (int i : row) {
            System.out.print(i);
            System.out.print("\t");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int twoDm[][]= new int[7][5];
        int i,j,k=1;

        for(i=0;i<7;i++) {
            for(j=0;j<5;j++) {
                twoDm[i][j]=k;
                k++;
            }
        }

        for(int[] row : twoDm) {
            printRow(row);
        }
    }
}

出力

1   2   3   4   5   
6   7   8   9   10  
11  12  13  14  15  
16  17  18  19  20  
21  22  23  24  25  
26  27  28  29  30  
31  32  33  34  35  

もちろん、他の回答で述べたように 7 と 5 を交換して、行ごとに 7 を取得することもできます。

于 2012-10-11T18:03:49.473 に答える
13

各行の後に新しい行を印刷する必要があります... System.out.print("\n")、または などを使用します。現状では、println何も印刷していないだけです。System.out.print("")printprintln"""\n"

于 2012-10-11T17:30:34.417 に答える
11

次のような 2 次元配列を出力するメソッドを作成できます。

//Displays a 2d array in the console, one line per row.
static void printMatrix(int[][] grid) {
    for(int r=0; r<grid.length; r++) {
       for(int c=0; c<grid[r].length; c++)
           System.out.print(grid[r][c] + " ");
       System.out.println();
    }
}
于 2012-10-11T17:33:48.483 に答える
3

コードに加えて、もう少し詳細な解決策を投稿します。コメントで示されている最初の間違いとその後の間違いは、この種の文字列連結の問題でよくあるエラーです。

最初の質問から、@djechlin によって適切に説明されているように、テーブルの各行が完了した後に新しい行を印刷する必要があることがわかります。したがって、次のステートメントが必要です。

System.out.println();

ただし、最初の print ステートメントの直後に印刷すると、誤った結果が得られます。何を与える?

1 
2 
...
n 

これは範囲の問題です。理由により 2 つのループがあることに注意してください。1 つのループは行を処理し、もう 1 つのループは列を処理します。内側のループである "j" ループは、指定された "i" に対して各配列要素 "j" を反復処理します。したがって、j ループの最後には、単一の行が必要です。この「j」ループの各反復は、テーブルの「列」を構築するものと考えることができます。内側のループが列を構築するため、そこに行を出力したくありません。要素ごとに新しい行が作成されます。

j ループから抜けたら、次の "i" 反復に進む前にその行を終了する必要があります。これは、テーブルの列ではなく、テーブルの行の「スコープ」であるため、改行を処理する正しい場所です。

for(i=0;i<7;i++){
    for(j=0;j<5;j++) {
        System.out.print(twoDm[i][j]+" ");  
    }
    System.out.println();
}

また、「i」ループと「j」ループの終了値を変更してテーブルのサイズを変更しても、この新しい行が当てはまることがわかります。

于 2012-10-11T18:05:55.603 に答える
3

@djechlinの回答の一部ですが、行と列を変更する必要があります。7 行 5 列と見なされているため、実際には 7 列 5 行が必要です。

このようにしてください: -

int twoDm[][]= new int[5][7];

for(i=0;i<5;i++){
    for(j=0;j<7;j++) {
        System.out.print(twoDm[i][j]+" ");
    }
    System.out.println("");
}
于 2012-10-11T17:31:42.577 に答える
2

記録として、Java 8 はより優れた代替手段を提供します。

int[][] table = new int[][]{{2,4,5},{6,34,7},{23,57,2}};

System.out.println(Stream.of(table)
    .map(rowParts -> Stream.of(rowParts
    .map(element -> ((Integer)element).toString())
        .collect(Collectors.joining("\t")))
    .collect(Collectors.joining("\n")));
于 2015-09-30T15:12:32.580 に答える
-1

これは遅いかもしれませんが、このメソッドはあなたが求めることを完璧な方法で行います。要素を「テーブルのような」スタイルで表示することもできます。

public static void display(int x[][])   // So we allow the method to take as input Multidimensional arrays
    {
        //Here we use 2 loops, the first one is for the rows and the second one inside of the rows is for the columns
        for(int rreshti = 0; rreshti < x.length; rreshti++)     // Loop for the rows
        {
            for(int kolona = 0; kolona < x[rreshti].length;kolona++)        // Loop for the columns
            {
                System.out.print(x[rreshti][kolona] + "\t");            // the \t simply spaces out the elements for a clear view   
            }
            System.out.println();   // And this empty outputprint, simply makes sure each row (the groups we wrote in the beggining in seperate {}), is written in a new line, to make it much clear and give it a table-like look 
        }
    }

このメソッドの作成が完了したら、これをメイン メソッドに入れるだけです。

display(*arrayName*); // So we call the method by its name, which can be anything, does not matter, and give that method an input (the Array's name)

ノート。入力として多次元配列を必要とするようにメソッドを作成したため、1 次元配列では機能しません (とにかく意味がありません)。

出典:リンクの説明をここに入力

PS。私の言語を使用して要素/変数に名前を付けたので、少し混乱するかもしれませんが、CBAがそれらを翻訳しました。

于 2015-08-26T09:47:10.903 に答える