java编程九宫格问题

编译通过,运行时总报益处,找出这个程序哪有问题? import java.util.Scanner; public class JiuGong{ public static void main(String[]args){ Scanner s = new Scanner(System.in); int x = s.nextInt(); int h = 0; int l = x/2; int[][] a = new int[x][x]; for(int i=1;i<=x*x;i++){ a[h][l] = i; //运行提示溢出 if(h==0&&l==x-1){h++;} else if(h==0){h=x-1;l++;} else if(l==x-1){h--;l=0;} else if(a[--h][++l]!=0){h+=2;l--;} else {h--;l++;} } for(int j=0;j<x;j++){ for(int k=0;k<x;k++){ System.out.print(a[h][l]+" "); } System.out.println(); } } }

第1个回答  2014-06-24
要求:根据输入的数字n,如:3,5,7...以矩阵显示n行n列数,这些数由1~n*n构成,要求矩阵的每行每列及对角线上n个数之和相等 预备知识: 在距阵中,1在第一行正中,随后的数字应放到上一个数字的右上方方格中,如果向上不行,就放到该列的最下方格子;如果向右不行,就放到该行的最左边;如果都不行,就放到上一个数字的正下方;如果目标格子中已经有数字,也放到上一个数字的正下方 思路: 1) 使用2维数组预备存储1~n*n这些数字 2) 1是放到第一行正中的,所以其索引号是:[0][(n-1)/2] 3) 随后的数字,其索引号原则如下 1> num的行索引为 num-1 的 (行索引-1) , num的列索引为 num-1 的 (列索引+1) 2>如果发现num的行,列索引都越位(-1或n),则 num的行索引为 num-1 的 (行索引+1) , num的列索引为 num-1 的 (列索引) 3>如果发现num的行,列索引指向的位置已经有数字,则 num的行索引为 num-1 的 (行索引+1) , num的列索引为 num-1 的 (列索引) 4>如果发现num的行越位(-1),则 num的行索引为n-1 5>如果发现num的列越位(n),则 num的列索引为0 import java.util.Scanner; public class JiuGong { public static void main(String[] args) { Scanner s = new Scanner(System.in); int x = s.nextInt(); //输入长度 int h = 0; //行 //在距阵中,1在第一行正中 int l = x / 2; //列 int[][] a = new int[x][x]; for (int i = 1; i <= x * x; i++) { a[h][l] = i; //运行提示溢出 //随后的数字应放到上一个数字的右上方方格中 h--; l++; //3.如果都不行,就放到上一个数字的正下方 if (h < 0 && l >= x) { //先返回上一个数字 h++; l--; //再下移一行 h++; } //1.如果向上不行,就放到该列的最下方格子 else if (h < 0) { h = x - 1; } //2.如果向右不行,就放到该行的最左边 else if (l >= x) { l = 0; } //4.如果目标格子中已经有数字,也放到上一个数字的正下方 else if (a[h][l] > 0) { //先返回上一个数字 h++; l--; //再下移一行 h++; } } //打印九宫格 for (int j = 0; j < x; j++) { for (int k = 0; k < x; k++) { System.out.print(a[j][k] + " "); } //换行 System.out.println(); } } }

采纳哦本回答被提问者采纳
相似回答