//凯文克莱门特 // Week3A Magic Squares
嘿所有,对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] + " ");
}
}
}
}
答案 0 :(得分:2)
我在msq [order] [order] = 1;
行出错了
msq = new int[order][order];
// ..
msq[order][order] = 1;
如果数组大小为 n ,则需要访问 0 到 n-1 的元素。没有第n个索引。在您的情况下,没有订单,订单索引。它只是从 0 到 order-1 ,并且是数组索引超出范围异常的原因。
答案 1 :(得分:2)
构造函数中出现这种情况的原因是什么?:
if(size < 1 || size % 2 == 0)
{
System.out.print("Order out of range");
order = 3;
}
请注意,无论何时使用不满足if子句的大小输入,都不会初始化变量顺序,默认为0.因此,2d数组的大小为零,并抛出越界错误。如果您尝试使用3作为默认值,那么您想移动该行:
order = 3;
。
需要考虑的其他事项: 1.使订单变量最终,因为你不打算改变它。如果您这样做,Eclipse IDE会警告您上述情况。
或 2.如果您要将订单值默认为3,则将其初始化为此。
private int order = 3
此外,您可以考虑打印一条消息,说明当条件不满足时,订单默认为三。
答案 2 :(得分: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回答了你问题的第二部分。
答案 3 :(得分:0)
msq [order] [(order] = 1;
- &GT;这是语法错误。你有'('。 你得到了绑定错误的结束,因为数组从0开始而不是1(这是每个初学者犯的错误)因此将其更改为msq [order-1] [order-1] = 1;
上面的答案是打印出数组的正确方法。