0

//Kevin Clement //Week3A Magic Squares

Hey all, doing an introductory assignment to 2dimensional arrays. Below is the code I have done which is pretty much done.

My problem I get is I'm not entirely sure how to print out the array, as well as getting everything to run right with a test method. I get an error out of bounds at the line msq[order][order] = 1;

I apologize if my formatting of question is wrong, still not used to this site. Any help would be great. Thanks!

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

我在 msq[order][order] = 1;

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

如果数组大小是n,那么您需要访问从0n-1的元素。没有第 n 个索引。在您的情况下,没有orderorder索引。它只是从0order-1,是数组索引越界异常的原因。

于 2011-09-15T03:45:40.577 回答
2

构造函数中出现这种情况的原因是什么?:

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

请注意,每当您使用不满足 if 子句的大小输入时,变量 order 都不会初始化并默认为 0。因此,二维数组的大小为零并引发超出范围的错误。如果您尝试使用 3 作为默认值,那么您想移动该行:

order = 3;

在 if 块之前。

其他需要考虑的事项: 1. 将 order 变量设为 final,因为您不打算更改它。如果您这样做,Eclipse IDE 会警告您上述情况。

或 2. 如果您打算将 order 的值默认为 3,请将其初始化。

private int order = 3

此外,您可能会考虑打印一条消息,说明当条件不满足时,订单默认为三个。

于 2011-09-15T04:03:54.397 回答
0

msq[order][(order] = 1;

--> 这里是一个语法错误。你有一个'('。你得到绑定错误结束,因为数组从 0 而不是 1 开始(这是每个初学者都会犯的错误)因此将其更改为 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();
 }

Mahesh 回答了您问题的第二部分。

于 2011-09-15T03:44:07.910 回答