2

ユーザーから奇数を受け取り、魔方陣を作成するプログラムを作成する必要があります。魔方陣は、各行、列、および対角線の合計が同じになるものです。これらは、コードを記述するための特性です。

  1. ユーザーに奇数を尋ねる
  2. n 行 n 列の配列を作成します。
  3. 次の手順に従って、魔方陣を作成します。
    を。最初の行の真ん中に 1 を置きます。
    b. 行から 1 を引き、列に 1 を足します。
    私。可能であれば、その位置に次の番号を配置します。
    ii. できない場合は、次の手順に従ってください。
    1. 行 -1 の場合、最後の行に変更
    2. 最後の列が最初の列に変更された場合
    3. ブロックされている場合は、次の行にドロップダウンします (元の位置から)
    4. 右上隅にある場合は、次の行にドロップダウンします。
  4. 配列を印刷する

コードを書きましたが、実行すると、プログラムは 2 以外のすべての数字を入力します。何らかの理由で、私のプログラムはそれをスキップします。たとえば、奇数として 3 を入力すると、出力は次のようになります。

6 1 0 
3 4 5 
9 7 8 

0 は存在しないはずですが、数字の 2 は存在します。これが私のコードです:

public static void main(String[] args) {
    System.out.print("Give an odd number: ");
    int n = console.nextInt();
    int[][] magicSquare = new int[n][n];

    int number = 1;
    int row = 0;
    int column = n / 2;
    while (number <= n * n) {
        magicSquare[row][column] = number;
        number++;
        row -= 1;
        column += 1;
        if (row == -1) {
            row = n - 1;
        }
        if (column == n) {
            column = 0;
        }
        if (row == 0 && column == n - 1) {
            column = n - 1;
            row += 1;
        } else if (magicSquare[row][column] != 0) {
            row += 1;
        }
    }

    for (int i = 0; i < magicSquare.length; i++) {
        for (int j = 0; j < magicSquare.length; j++) {
            System.out.print(magicSquare[i][j] + " ");
        }
        System.out.println();
    }
}

どこが間違っていたのか、なぜ私のプログラムが2番を飛ばしているのか教えてもらえますか? *これは宿題の質問なので、コードのみの回答でお願いします。ありがとう。

4

2 に答える 2

3

3.4 を削除すると、おそらくコードが修正されます。

public static void main(String[] args) {

    System.out.print("Give an odd number: ");
    int n = console.nextInt();
    int[][] magicSquare = new int[n][n];

    int number = 1;
    int row = 0;
    int column = n / 2;
    int curr_row;
    int curr_col;
    while (number <= n * n) {
        magicSquare[row][column] = number;
        number++;
        curr_row = row;
        curr_col = column;
        row -= 1;
        column += 1;
        if (row == -1) {
            row = n - 1;
        }
        if (column == n) {
            column = 0;
        }
        if (magicSquare[row][column] != 0) {
            row = curr_row + 1;
            column = curr_col;
            if (row == -1) {
                row = n - 1;
            }
        }
    }

    for (int i = 0; i < magicSquare.length; i++) {
        for (int j = 0; j < magicSquare.length; j++) {
            System.out.print(magicSquare[i][j] + " ");
        }
        System.out.println();
    }
}

n = 3 に設定すると、正しいと思われる次の出力が得られます。

8 1 6 
3 5 7 
4 9 2 
于 2016-03-16T16:01:36.173 に答える