2013-01-15 43 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; 
}