java2程序设计(电子工业出版社)
第二章的一个课后题,要求输出以下格式的数组:
1    2    4  10
3    5    9  11
6    8  12  15
7  13  14  16以下是程序:不过有点问题。public class Array 
{

    public static int add(int n,int count,int ary[][])
    {
    int i;
    
    if(n<6)
 {
for(i=0;i<n;i++)
     ary[i][n-i-1]=count++;
     }
    else
 {
for(i=n-3;i<n-2;i++)
ary[i][n-i-1]=count++;
 }
     return count;
    }
    
    public static int dec(int n,int count,int ary[][])
    {
     int i;
    
if(n<5)
{
for(i=n-1;i>=0;i--)
     ary[i][n-i-1]=count++;
    }
    else
 {
  if(n==5)
  {
   for(i=n-2;i>0;i--)
      ary[i][n-i-1]=count++;
  }
  else if(n==7)
  ary[3][3]=16;
 }
 return count;
 }    public static void main(String args[])
    {
     int n=1,count=1;
     int ary[][]=new int[5][5];
    
     do
     {
     switch(n%2)
     {
     case 0:count=add(n,count,ary);
            break;
     case 1:count=dec(n,count,ary);
            break;
     }
     }while((n++)<8);
    
    }
    
   int m,n;

for(m=0;i<4;i++)                            //以下两个for语句报错:第一个是非法的类开始,第二个是需要标识符。请问怎么修改?
{
for(n=0;j<4;j++)
{
System.out.print(ary[m][n]);
if(n==3)
System.out.println();
}
}    
}

解决方案 »

  1.   

    你在main()中定义了2个n
    int n=1,count=1; 和
    int m,n; 
    而且这一句中又有一个j没有定义for(n=0;j <4;j++) 
      

  2.   

    另外你的while语句后多了一个}
      

  3.   

    代码改过来是 public static void main(String args[]) 
        { 
          int n=1,count=1; 
          int ary[][]=new int[5][5]; 
             do 
          { 
          switch(n%2) 
          { 
          case 0:count=add(n,count,ary); 
                 break; 
          case 1:count=dec(n,count,ary); 
                 break; 
          } 
          }while((n++) <8); 
         
         int i,j; 
    for(i=0;i<4;i++)                           

    for(j=0;j<4;j++) 

    System.out.print(ary[i][j]); 
    if(n==3) 
    System.out.println(); 

    }     
    }
    }
      

  4.   

    到这里编译能通过
    但运行时提示数组越界
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
            at Test.add(Test.java:15)
            at Test.main(Test.java:49)
      

  5.   


    package bt_lose;
    /**
     * 
     * @author botao
     *程序整体还是运行不起来 <br>
     *出现了一个数组下标越界的异常。<br>
     *你的算法我也没看。<br>
     *按照我的理解输出应该是<br>
     *  1   2   6   7 
     *  3   5   8  13
     *  4   9  12  14
     * 10  11  15  16
     * 但是和你给的不一样。
     */
    public class Array { public static int add(int n, int count, int ary[][]) {
    int i;
    if (n < 6) {
    for (i = 0; i < n; i++)
    ary[i][n - i - 1] = count++;
    } else {
    for (i = n - 3; i < n - 2; i++)
    ary[i][n - i - 1] = count++;
    }
    return count;
    } public static int dec(int n, int count, int ary[][]) {
    int i;
    if (n < 5) {
    for (i = n - 1; i >= 0; i--)
    ary[i][n - i - 1] = count++;
    } else {
    if (n == 5) {
    for (i = n - 2; i > 0; i--)
    ary[i][n - i - 1] = count++;
    } else if (n == 7)
    ary[3][3] = 16;
    }
    return count;
    } public static void main(String args[]) {
    int n = 1, count = 1;
    int ary[][] = new int[5][5];
    do {
    switch (n % 2) {
    case 0:
    count = add(n, count, ary);
    break;
    case 1:
    count = dec(n, count, ary);
    break;
    }
    } while ((n++) < 8);
    }
    /**
     * 看你代码的功能好象是要完成输出,所以方法名字就起成了print,<br>
     * 至于i和j两个参数,是你写在for循环中的我也不知道作用是干什么,<br>
     * 二维数组ary好象是输出源
     * @param i
     * @param j
     * @param ary
     */
    public static void print(int i, int j, int[][] ary) {
    int m, n; for (m = 0; i < 4; i++) // 以下两个for语句报错:第一个是非法的类开始,第二个是需要标识符。请问怎么修改?
    {
    for (n = 0; j < 4; j++) {
    System.out.print(ary[m][n]);
    if (n == 3)
    System.out.println();
    }
    }
    }
    }你说的那两段代码必须写在方法中,或者静态块中
      

  6.   

    怎么这么粗心,你看你的
    for(m=0;i <4;i++)                            //以下两个for语句报错:第一个是非法的类开始,第二个是需要

    for(n=0;j <4;j++) 

    System.out.print(ary[m][n]); 
    if(n==3) 
    System.out.println(); 

    在那里面???
    不在方法体里面亚???这个循环算什么呀?????
      

  7.   

    第二章,18题第一小题吧,我做了,代码如下:
    import java.io.*; 
    import java.util.*; public class Java2181

    //int N;
    public static void main(String [] args){ 
    try{ 
    System.out.print("输入矩阵的边数N:"); 
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
    String st=(String)br.readLine(); 
    System.out.println(); 
    int N = Integer.parseInt(st);//System.out.print("输出:"+N);
    int[][]   intArray   =   new   int[N][N]; 
                    Java2181   main   =   new   Java2181(); 
                    main.createArray(intArray,N); 
                    for(int   i   =   0;   i <   N;   i++)   { 
                            for(int   j   =   0;   j   <   N;   j++)   { 
                                    System.out.print(intArray[i][j]+(intArray[i][j]>=10 ? " " : "  ")); 
                            } 
                            System.out.println(); 
                    } }
    catch(IOException e){} 

    private   void   createArray(int[][]   array, int   n)   

         int b=1;
         for(int i=0;i<(2*n-1);i++)
          {
             int j;
              if((i%2)==0)
                {
                if(i<n)
                {
                for(j=0;j<=i;j++)
                {
                array[i-j][j]=b;
                b++;
                }
                }
                else
                {
                for(j=n-1;j>=(i-n+1);j--)
                {
                array[j][i-j]=b;
                b++;
                }
                }
                }
                else
                {
                if(i<n)
                {
                for(j=0;j<=i;j++)
                {
                array[j][i-j]=b;
                b++;
                }
                }
                else
                {
                for(j=n-1;j>=(i-n+1);j--)
                {
                array[i-j][j]=b;
                b++;
                }
                }
                }
          }     
     } 
    }