2013-01-15 42 views
0

我应该编写一个程序,询问用户想要的行数。例如用户输入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(); 
     } 

    } 
} 
+1

如果你输入'1那么(k <(1 * 1))永远不会为真,从而导致循环永不执行。 –

+0

从用户输入'1'开始考虑你想要的输出。它是单个元素'1'被返回还是有一种模式? –

+0

@AurA请注意,[家庭作业标签现在正在逐步淘汰,不能再使用](http://meta.stackexchange.com/questions/147100/the-homework-tag-is-now-officially-deprecated )。 – Gilles

回答

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

number = 1,二维array int[][] num没有得到填充,因为它不进入循环while(k<(1*1)),因此底部for循环打印出二维值仅打印0,因为数组本身没有被初始化。

0

num[0][0]尚未初始化,因为您没有进入循环。在循环之前尝试:

if (number == 1) 
    num[0][0] = 1; 
0
if(number == 1) { 
    System.out.println("1"); 
    return; 
}