0

我应该编写一个程序来询问用户想要的行数。例如,如果用户输入 5,它将显示从 25 到 1 的所有数字,排列为 5 列和 5 行。如果输入 5,输出应该是这样的:

25  24  23  22  21
16  17  18  19  20  
15  14  13  12  11  
 6   7   8   9  10  
 5   4   3   2   1

如您所见,有一个模式。第一个出现的数字是数字的平方。然后下一个数字是数字的平方减 1。直到它达到 21,将减去 5 得到 16。然后它会加 1 直到达到 20。如您所见,它就像一条蛇。

问题是它适用于任何数字,但输入 1 时除外。0 是输入 1 时的当前结果。

这是我当前的代码:请帮助我,谢谢

import java.util.*;
public class ArrayOutput2 
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        int number = 0;

        System.out.print("Enter number of rows: ");
        number = input.nextInt();

        int[][] num = new int[number][number];
        int k=1, i, j;

            while(k< (number*number))
            {
                for(i=number; i>=1; i--)
                {
                   if (i%2==1)
                   {
                     for(j=number-1; j>=0; j--)
                         {
                             num[i-1][j]=k;
                             k++;
                         }
                   }

                   else
                         for(j=0; j<=number-1; j++)
                         {
                             num[i-1][j]=k;
                             k++;
                         }
                 }
           }

        for(i=0;i<number;i++)
        {
             for(j=0;j<number;j++)

             System.out.print(num[i][j]+"\t");
             System.out.println();   
        }

    }
}
4

4 回答 4

2

假设用户输入1一个值,因此number == 1。您分配一个数组 num[1][1],这是一个只有一个可能的单元格的数组,number[0][0]

然后开始循环

k=1;
while (k<(number*number)); // which is like while(1<1*1)==FALSE

因此从不使用循环。您可以使用:

1) 一个do-while循环至少运行一次循环
2) 或在循环结束后添加一条if语句while()

// Using an IF statement immediately after the unmodified while()
if (number==1)
{
   num[0][0]=1;
}


// or with a loop DO-WHILE
    do
    {
        for(i=number; i>=1; i--)
        {
           if (i%2==1)
           {
             for(j=number-1; j>=0; j--)
              {
                num[i-1][j]=k;
                k++;
              }
           }
           else
              for(j=0; j<=number-1; j++)
              {
                num[i-1][j]=k;
                k++;
              }
         }
   }while(k<(number*number));
于 2013-01-15T12:13:29.973 回答
1

number = 12Darray int[][] num没有进入循环时,它不会被填充while(k<(1*1)),因此打印 2D 值的底部 for 循环仅打印,0因为数组本身没有被初始化。

于 2013-01-15T12:05:20.617 回答
0
if(number == 1 ) {
    System.out.println("1");
    return;
}
于 2013-01-15T14:54:57.180 回答
0

num[0][0]由于您没有进入循环,因此尚未初始化。在循环之前试试这个:

if (number == 1)
    num[0][0] = 1;
于 2013-01-15T12:08:14.743 回答