0

//ケビン クレメント //Week3A 魔方陣

こんにちは、2 次元配列への入門的な割り当てを行っています。以下は私が行ったコードで、ほとんど完了しています。

私の問題は、配列を印刷する方法と、テストメソッドですべてを正しく実行する方法が完全にわからないことです。msq[order][order] = 1; の行で範囲外のエラーが発生します。

まだこのサイトに慣れていないため、質問の形式が間違っていたら申し訳ありません。どんな助けでも素晴らしいでしょう。ありがとう!

import java.util.*;

class Magic
{
  private int order;
  int msq[ ][ ];

  public Magic(int size)
  {
     if(size < 1 || size % 2 == 0)
     {
        System.out.print("Order out of range");
        order = 3;
     }
     msq = new int[order][order];
     Build();
     Display();
   }

  public void Build()
   {
     int row = 0;
     int col =0;
    msq[order][order] = 1;

     for(int k = 1; k <= order * order; k++)
     {
        msq[row][col] = k;

        if(row == 0 && col == order -1)
           row++;
        else if(row == 0)
        {
           row = order - 1;
           col++;
        }
        else if(msq[row - 1][col + 1] != 0)
           row++;
        else if(msq[row -1][col + 1] == 0)
        {
           row--;
           col++;
        }
        if(col == order - 1)
        {
           col = 0;
           row--;
        }

     }
  }
  public void Display()
  {

     for(int i = 0; i < order; i++)
     {
        for(int k = 0; k < order; k++)
        {
           System.out.println(msq[i][k] + " ");
        }
     }


  }
}
4

4 に答える 4

2

コンストラクターでこの状態が発生する理由は何ですか?:

if(size < 1 || size % 2 == 0)
 {
    System.out.print("Order out of range");
    order = 3;
 }

if 句を満たさないサイズ入力を使用すると、変数 order は初期化されず、デフォルトで 0 になることに注意してください。その結果、2 次元配列のサイズはゼロになり、範囲外エラーがスローされます。デフォルト値として 3 を使用しようとしている場合は、行を移動します。

order = 3;

if ブロックの前。

その他の考慮事項: 1. 注文変数を変更する予定がないため、最終変数にします。これを行うと、Eclipse IDE は上記の状況について警告します。

または 2. order の値を 3 にデフォルト設定する場合は、そのように初期化します。

private int order = 3

また、条件が満たされない場合、注文のデフォルトが 3 であるというメッセージを出力することを検討することもできます。

于 2011-09-15T04:03:54.397 に答える
2

msq[order][order] = 1; の行で範囲外のエラーが発生します。

msq = new int[order][order];
// ..
msq[order][order] = 1;

配列サイズがnの場合、 0からn-1までの要素にアクセスする必要があります。n 番目のインデックスはありません。あなたの場合、orderorder index はありません。これは0からorder-1までのみであり、配列インデックス範囲外例外の理由です。

于 2011-09-15T03:45:40.577 に答える
0

msq[注文][(注文] = 1;

--> ここに構文エラーがあります。'(' があります。配列が 1 ではなく 0 から始まるため、境界エラーの終わりが発生します (これはすべての初心者が犯す間違いです)。したがって、それを msq[order-1][order-1] = 1; に変更します。

上記の答えは、配列を出力する正しい方法です。

于 2011-09-15T03:51:39.453 に答える
0

Java で整数の行列を出力するには

for (int i = 0; i < order; i++) {
    for (int k = 0; k < order; k++) {
       System.out.printf("%6d", msq[i][k]);
    }
    System.out.println();
 }

あなたの質問の 2 番目の部分は、Mahesh によって回答されています。

于 2011-09-15T03:44:07.910 に答える