【发布时间】:2015-12-03 01:23:47
【问题描述】:
我正在尝试开发一个程序来创建和打印一个 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();
}
}
}
编辑 - 格式化
【问题讨论】:
-
你能重新格式化规则吗?我在解析它们时遇到了问题——尤其是最后的那部分。