我应该编写一个程序来请求用户想要的行数。例如,如果用户输入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();
}
}
}
假设用户输入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)或者在while()
循环结束后添加if
语句:
// 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));
当number = 1
, 2D array int[][] num
没有被填充,因为它没有进入循环while(k<(1*1))
,因此底部for循环打印2D值只打印0
,因为数组本身没有被初始化。
num[0][0]
未初始化,因为您没有进入循环。在循环之前试试:
if (number == 1)
num[0][0] = 1;
if(number == 1 ) {
System.out.println("1");
return;
}