3

Java の演習を完了するのに苦労しています。2 次元配列を使用して、コマンド ライン パラメータに基づいてテーブルを動的に作成および表示する必要があります。

例:

Java テーブル 5

+-+-+-+-+-+
|1|2|3|4|5|
+-+-+-+-+-+
|2|3|4|5|1|
+-+-+-+-+-+
|3|4|5|1|2|
+-+-+-+-+-+
|4|5|1|2|3|
+-+-+-+-+-+
|5|1|2|3|4|
+-+-+-+-+-+

私がこれまでに行ったこと:

public static void main(String[] args) {

    int num = Integer.parseInt(args[0]);

    String[][] table = new String[num*2+1][num];

    int[] numbers = new int[num];
    int temp = 0;

    for(int i=0; i<numbers.length; i++)
        numbers[i] = i+1;

        // wrong
    for(int i=0; i<table.length; i++){
        for(int j=0; j<num;j++){
            if(i%2!=0){
            temp=numbers[0];
            for(int k=1; k<numbers.length; k++){
                numbers[k-1]=numbers[k];
            }
            numbers[numbers.length-1]=temp;
            for(int l=0; l<numbers.length; l++){
            table[i][j] = "|"+numbers[l];
            }
            }
            else
                table[i][j] = "+-";
    }
    }

    for(int i=0; i<table.length; i++){
        for(int j=0; j<num; j++)
        System.out.print(table[i][j]);
        if(i%2==0)
            System.out.print("+");
        else
            System.out.print("|");

        System.out.println();}
}

すべての行に 1|2|3|4 が出力されるため、これは機能しません。これは必要なものではありません。私は問題を発見しました。これは、最初の for ループが配列の順序を必要以上に変更し、基本的に最初の状態に戻るためです。

もっと多くのコードを書くことでこれを達成する方法があることはわかっていますが、私はコードを書いている間にコードを「最適化」するために常に可能な限り入れ子にする傾向があるので、変数とループを少なくしてこの課題を解決しようとしました。できるだけ。

4

4 に答える 4

1

次のコードは、データの 2d int 配列を初期化します (例では 1-5)。そして表を印刷します。テーブル構造が String 2d-array に保存されていないことに注意してください。表を印刷するだけです。行内のコメントを参照してください。

public static void main(String[] args){
        final int num = 5; //hardcoded 5, just for testing.
        final int[][] data = new int[num][num];
        for (int r = 0; r < data.length; r++) {
            for (int c = 0; c < data[r].length; c++) {
                final int t = r + c + 1;
                data[r][c] = t <= num ? t : t - num;
            }
        }
        // now we have all int data in data 2D-array    
        // here is the +-+- line
        final StringBuilder sb = new StringBuilder("+");
        for (int i = 0; i < data.length; i++) 
            sb.append("-+");    
        // now print the table
        for (int r = 0; r < data.length; r++) {
            System.out.println(sb.toString());
            for (int c = 0; c < data.length; c++) 
                System.out.print("|" + data[r][c]);
            System.out.println("|");
        }
        System.out.println(sb.toString());

    }

出力:

引数として num=9 を指定した場合。上記のコードは次のように出力されます。

+-+-+-+-+-+-+-+-+-+
|1|2|3|4|5|6|7|8|9|
+-+-+-+-+-+-+-+-+-+
|2|3|4|5|6|7|8|9|1|
+-+-+-+-+-+-+-+-+-+
|3|4|5|6|7|8|9|1|2|
+-+-+-+-+-+-+-+-+-+
|4|5|6|7|8|9|1|2|3|
+-+-+-+-+-+-+-+-+-+
|5|6|7|8|9|1|2|3|4|
+-+-+-+-+-+-+-+-+-+
|6|7|8|9|1|2|3|4|5|
+-+-+-+-+-+-+-+-+-+
|7|8|9|1|2|3|4|5|6|
+-+-+-+-+-+-+-+-+-+
|8|9|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+-+
|9|1|2|3|4|5|6|7|8|
+-+-+-+-+-+-+-+-+-+
于 2012-12-17T18:24:07.707 に答える
1

あなたは複雑すぎます。エラーを見つけるのは難しい。ストレートコードは次のとおりです。

public static void main(String[] args) {


    //int num = Integer.parseInt(args[0]);
    int num = 5; // for test

    // creating 2d array
    int[][] figures = new int[num][num];

    // filling the array
    for(int row=0; row<figures.length; ++row) {
        for(int col=0; col<figures[row].length; ++col) {
            figures[row][col] = (row + col) % num + 1; 
        }
    }

    // printing the array
    for(int row=0; row<figures.length; ++row) {

        // printing border
        for(int col=0; col<figures[row].length; ++col) {
            System.out.print("+-");
        }
        System.out.println("+");

        // printing data row
        System.out.print("|");
        for(int col=0; col<figures[row].length; ++col) {
            System.out.print(figures[row][col]);
            System.out.print("|");
        }
        System.out.println();
    }

    // printing final border
    for(int col=0; col<figures[0].length; ++col) {
        System.out.print("+-");
    }
    System.out.println("+");


}
于 2012-12-17T16:53:44.003 に答える
1
public static void main(String args[]){
int dimension = Integer.valueOf(args[0]);
int[][] twoDimArray = new int[dimension][dimension];
for(int i=0;i<dimension;i++){
  for(int j=0;j<dimension;j++){
    System.out.print("|"+((i+1)%(dimension+1)));
    }  //end of j loop
 } //end of i loop
} //end of main

上記は、指定された順序で数値を出力するためのロジックにすぎません。他のデザイン パターン ( +-+ ) は管理できると思います。

于 2012-12-17T16:49:54.503 に答える