2013-01-16 26 views
2

我應該編寫一個程序,詢問用戶想要的行數。例如,用戶輸入4作爲number它將顯示以4列和4行排列的從1到16的所有數字。如果輸入4,應該是輸出:數組循環程序邏輯

1 2 3 4 
8 7 6 5 
9 10 11 12 
16 15 14 13 

正如您所看到的那樣存在一種模式。第一個出現的數字是1,然後它增加到4.下一行開始8,然後到5.正如你所看到的,它就像一條蛇。但是我的程序不工作。雖然我嘗試模擬我的程序,但我仍然無法弄清楚什麼是錯的。

另一個例子是進入3時:

1 2 3 
6 5 4 
7 8 9 

這裏是我當前的代碼:請幫我謝謝

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; 

     if (number == 1) 
     { 
       num[0][0] = 1; 
     } 


      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=number-1;i<0;i--) 
     { 
      for(j=number-1;j<0;j--) 

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

    } 
} 
+2

什麼是y你的意思是不工作?你看到什麼輸出或錯誤? – cowls

+1

[數組循環程序]的可能重複(http://stackoverflow.com/questions/14337245/array-looping-program) –

+3

不知道你甚至需要一個多維數組。只需一個簡單的循環,並在達到輸入限制時再做一個新行。 – enkor

回答

3

這樣做產生的除外輸出:

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=1, y = 0; 
if (number == 1) 
{ 
    num[0][0] = 1; 
} 

    while(y<number) 
    { 
     for(int x =0;x<number;++i,++x) 
      num[y][x] = i; 


     ++y; 
     if(y<number) 
      for(int x = number-1;x>=0;++i,--x) 
       num[y][x] = i; 

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

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

希望它適合你

+0

這一個奇怪,甚至謝謝你的作品 –

4

它看起來像num[][]陣列設置正確。

我想你只需要在上一個for循環中將<翻轉爲>=即可。

由於目前您正在循環播放i,而我小於0,但它始於4,因此它永遠不會進入循環,因此從不向控制檯輸出任何內容。

它應該是:

for(i=number-1;i>=0;i--) 
{ 
    for(j=number-1;j>=0;j--) 
+0

只是一個說明,即使'num'設置正確,使用這樣的二維數組仍然是錯誤的。 –

+0

不會產生預期的輸出 –

+0

它的確如此。我已經在這裏運行,我只是更新它應該是> =不>> – cowls

0

我認爲使用二維數組是在你的情況下不必要試試這個片斷:

for (int i=0; i<number; i++) { 
      if (i%2 == 0) { 
       for (int j=i*number; j<(i+1)*number; j++) { 
        System.out.print((j + 1) + " "); 
       } 
      } else { 
       for (int j=(i+1)*number; j>i*number; j--) { 
        System.out.print(j + " "); 
       } 
      } 
      System.out.println(); 
     }