我应该编写一个程序,询问用户想要的行数。例如,用户输入5将显示从5列到5行排列的从25到1的所有数字。如果输入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();
}
}
}
答案 0 :(得分: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));
答案 1 :(得分:1)
当number = 1
时,2D array int[][] num
没有填充,因为它没有进入循环while(k<(1*1))
,因此打印2D值的底部for循环仅打印0
因为数组本身没有初始化。
答案 2 :(得分:0)
num[0][0]
尚未初始化。在循环之前尝试这个:
if (number == 1)
num[0][0] = 1;
答案 3 :(得分:0)
if(number == 1 ) {
System.out.println("1");
return;
}