我正在尝试开发一个程序,用于创建和打印n X n“魔术方块”,其中n是用户生成的奇数。但是,我一直得到同样的错误“java.lang.ArrayIndexOutOfBoundsException:3”
算法摘要:
将1放在第一行(第0行)的中心
根据以下规则放置2,3,4 ... n
向上和向右移动到新位置(row,col),即row = row-1,col = col + 1 如果row = -1(行离开数组),则将数字放在(n-1,col)中的最后/最后一行
如果col = n(列不在数组中),则将数字放入(row,0)
从顶角广场移动时,如果拍摄地点,请将下一个数字放在左下角的正方形中,将新号码放在前一个数字下面
import java.util.*;
public class MagicSquare
{
public static void main (String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter an odd integer:");
int n = input.nextInt();
int[][] magic = new int[n][n];
int row = 0;
int col = (n-1)/2;
magic[row][col] = 1;
for(int i=2; i <=n*n; i++)
{
if(magic[row-1][col+1]==0){
row=row-1;
col=col+1;
}
else{
row=row+1;
}
if(row==-1)
row = n-1;
if (col== n)
col=0;
magic[row][col]=i;
}
for(int x = 0; x<n; x++)
{
for(int y=0; y<n; y++)
System.out.print("|"+magic[x][y] +"|\t");
System.out.println();
}
}
}
编辑 - 格式化
答案 0 :(得分:0)
在for
循环中,您将row
重置为结尾:
if(row==-1)
row = n-1;
但是在下一次迭代中,您使用row + 1
进行索引:
if(magic[row+1][col+1]==0)
哪一天会结束。
答案 1 :(得分:0)
所以,遵循你的规则(感谢重新格式化它们!):
odd_numbers = [number % 2 = 1 for number in range(10)]
这非常类似于条件(!= 0)中的更改以检测占用的位置,并且通过分离所有的添加和减少,当几个发生在一个中时,更容易看到组合结果行。
我没有测试过这段代码,所以它可能仍有问题,但希望这会让你走上正确的道路!