[解決済み】javaでマジックスクエアを作成する
2022-02-09 10:48:52
質問内容
ユーザーから奇数を受け取り、マジックスクエアを作成するプログラムを書かなければなりません。マジックスクエアとは、各行、列、対角線の和が同じになるものである。以上がコードを書く上での特徴である。
<ブロッククオート- ユーザーに奇数を求める
- n×nの配列を作成する。
-
以下の手順で、マジックスクエアを作成します。
a. 1行目の中央に1を配置します。
b. 行から1を引き、1を足す を列挙します。
i. 可能であれば、その位置に次の数字を配置します。
ii. 不可能な場合は、以下の手順に従います。- 1行目にある場合は、最後の行に変更します。
- 最後の列の場合、最初の列に変更する
- ブロックされている場合は、(元の位置から)次の行にドロップダウンします。
- 右上にある場合は、次の行にドロップダウンします。
- 配列を表示する
コードを書きましたが、実行すると、プログラムは2という数字を除いてすべての数字を入れます。なぜか、私のプログラムは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をスキップするのか、誰か教えてください。*これは宿題のようなものなので、コードのみの回答でお願いします。ありがとうございます。
どのように解決するのですか?
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
関連
-
[解決済み】Javaクラスの "型に解決できない"
-
[解決済み】Eclipseで「JUnitテストが見つかりませんでした。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】"実引数リストと形式引数リストの長さが異なる"
-
[解決済み] hibernateでResultSetを抽出できない。
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】Gradleがtools.jarを見つけ出さない
-
[解決済み】スレッド "main "での例外 java.util.NoSuchElementException
-
[解決済み】Java LinkedListでNodesを使用する
-
[解決済み】予期しない型エラー