A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



  1. public class Test {

  2.         public static void main(String[] args) {
  3.                 // TODO Auto-generated method stub
  4.        String strIn="5";//
  5.        int n=Integer.parseInt(strIn);
  6.        System.out.println("这是行列式为5的螺线型数组:");
  7.        int intA=0;
  8.        int[][]array=new int[n][n];
  9.        int intB;
  10.        if(n%2!=0){
  11.                intB=n/2+1;
  12.        }
  13.        else intB=n/2;
  14.        for(int i=0;i<intB;i++){
  15.                //从外向里循环
  16.                //从右向左横向开始
  17.                for(int j=i;j<n-i;j++){
  18.                        array[i][j]=intA;
  19.                        intA++;
  20.                }
  21.                for(int k=i+1;k<n-i;k++){
  22.                        array[k][n-i-1]=intA;
  23.                        intA++;
  24.                }
  25.                for(int l=n-i-2;1>=i;l--){
  26.                        array[n-i-1][l]=intA;
  27.                        intA++;
  28.                }
  29.                for(int m=n-i-2;m>i;m--){
  30.                        array[m][i]=intA;
  31.                        intA++;
  32.                }
  33.        }
  34.        for(int i=0;i<n;i++){
  35.                for (int j = 0; j < n; j++) {
  36.                         System.out.println(array[i][j]+"\t");
  37.                 }
  38.                System.out.println();
  39.        }
  40.         }

  41. }
复制代码

运行结果是这样的这是行列式为5的螺线型数组:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
        at Test.main(Test.java:29)

6 个回复

倒序浏览
看不懂。
回复 使用道具 举报
66666666666666666
回复 使用道具 举报
28行29行的小字母L和数字1写错了吧,导致数组越界异常,看是不是这样的:
  1. public class Test {

  2.         public static void main(String[] args) {
  3.                 // TODO Auto-generated method stub
  4.        String strIn="5";//
  5.        int n=Integer.parseInt(strIn);
  6.        System.out.println("这是行列式为5的螺线型数组:");
  7.        int intA=0;
  8.        int[][]array=new int[n][n];
  9.        int intB;
  10.        if(n%2!=0){
  11.                intB=n/2+1;
  12.        }
  13.        else intB=n/2;
  14.        for(int i=0;i<intB;i++){
  15.                //从外向里循环
  16.                //从右向左横向开始
  17.                for(int j=i;j<n-i;j++){
  18.                        array[i][j]=intA;
  19.                        intA++;
  20.                }
  21.                for(int k=i+1;k<n-i;k++){
  22.                        array[k][n-i-1]=intA;
  23.                        intA++;
  24.                }
  25.                for(int l=n-i-2;l>=i;l--){
  26.                        array[n-i-1][l]=intA;
  27.                        intA++;
  28.                }
  29.                for(int m=n-i-2;m>i;m--){
  30.                        array[m][i]=intA;
  31.                        intA++;
  32.                }
  33.        }
  34.        for(int i=0;i<n;i++){
  35.                for (int j = 0; j < n; j++) {
  36.                         System.out.print(array[i][j]+"\t");
  37.                 }
  38.                System.out.println();
  39.        }
  40.         }

  41. }

复制代码

回复 使用道具 举报
就是这句:      for(int l=n-i-2;1>=i;l--)  第二个是数字一,应该是小写字母L的
回复 使用道具 举报
梦想家Eva 发表于 2015-12-20 22:23
就是这句:      for(int l=n-i-2;1>=i;l--)  第二个是数字一,应该是小写字母L的

谢了,谢了,谢了,
回复 使用道具 举报
这个代码我还没写出来,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马