2012-12-11 76 views
1

的編程語言:Java的傳遞一個二維數組從一個方法到另一個

編輯:Vim的

我一直在努力做的是模塊主要包括二維數組賦值。我一直在努力掙扎,因爲這是我第二次使用任何類型的數組。無論如何,我剛剛收到了一些問題,希望有人能爲我解決問題。

1)這是如何將一個雙數組傳遞給另一個方法?

這是我的布爾數組:

boolean[][] TempGrid = new boolean[GRIDSIZE][GRIDSIZE]; 

這是我怎麼一直試圖通過它。

countNeighbors(TempGrid[][]); 

這方法接受陣列:

public static int countNeighbors (final boolean[][] grid, final int row, final int col) 

然而,當我編譯我得到一個錯誤說:

error: '.class' expected 
    countNeighbors(TempGrid[][]); 
           ^
1 error 

我做了錯誤的.c​​lass像一些研究:

- http://www.dreamincode.net/forums/topic/70299-class-expected-error/

- http://stackoverflow.com/questions/12309220/class-error-in-java-applet

- http://www.daniweb.com/software-development/java/threads/213357/pass-2-dimensional-array-into-method

和各種其他網站/論壇。他們提供的解決方案或者不起作用,或者導致我的程序出現更多問題。

順便說一句,這是整個方法:

public static void genNextGrid (boolean[][] grid) 
{ 

    boolean[][] TempGrid = new boolean[GRIDSIZE][GRIDSIZE]; 

    TempGrid[GRIDSIZE][GRIDSIZE] = grid[GRIDSIZE][GRIDSIZE]; 

    countNeighbors(TempGrid); 

    for(int row = 1; row < 18; row++) 
{ 

     countNeighbors(row); 

     for(int col = 1; col < 18; col++) 
{ 

      countNeighbors(col); 

      if(n == 3) 
      { 
       TempGrid[row][col] = true; 
      } 
      else if(n == 2 || n == 3) 
      TempGrid[row][col] = true; 
      } 
      else 
      { 
       TempGrid[row][col] = false; 
      } 

     } 
    } 


} 

我已經嘗試在去除countNeighbors(TempGrid[][]);[][]所以它看起來像:

countNeighbors(TempGrid); 

,但給了我3個錯誤

error: method countNeighbors in class Life cannot be applied to given types; 
    countNeighbors(TempGrid); 
    ^
required: boolean[][],int,int 
found: boolean[][] 
reason: actual and formal argument lists differ in length 


error: method countNeighbors in class Life cannot be applied to given types; 
     countNeighbors(row); 
     ^
required: boolean[][],int,int 
found: int 
reason: actual and formal argument lists differ in length 


error: method countNeighbors in class Life cannot be applied to given types; 
      countNeighbors(col); 
      ^
    required: boolean[][],int,int 
found: int 
reason: actual and formal argument lists differ in length 

- 感謝您的幫助

回答

1

當您聲明變量時,您只需要[] []。之後,只使用名稱(即TempGrid)

因此,如果您的方法採用二維數組並命名爲foo,那麼:foo(TempGrid)會將對TempGrid的引用傳遞給foo。

在Java中,所有對象都是對象,因此您的方法必須在類中聲明。

恕我直言,你的方法應該是這個樣子:

public static void genNextGrid (boolean[][] grid) 
    { 

     boolean[][] TempGrid = new boolean[GRIDSIZE][GRIDSIZE]; 

     TempGrid = grid; 


     for(int row = 1; row < 18; row++) 
     { 


      for(int col = 1; col < 18; col++) 
      { 

       int n = countNeighbors(TempGrid, row, col); 

       if(n == 3) 
       { 
        TempGrid[row][col] = true; 
       } 
       else if(n == 2 || n == 3) 
        TempGrid[row][col] = true; 
       else 
       { 
        TempGrid[row][col] = false; 
       } 
      } 

     } 
    } 
2

是第二個方法是正確的方式我。Ë

countNeighbors(TempGrid); 

而且你後來錯誤說你的不匹配所需的參數的數量,

public static int countNeighbors (final boolean[][] grid, final int row, final int col) 

countNeighbors方法需要3個參數,而你只是過客1.確認你需要傳遞給這個方法,或者如果不需要的話刪除它們。此外,它還會返回一個int,您需要將它分配給某些內容以供進一步使用。我設想它是變量n,你打算使用它。

您需要調用的方法最內層循環爲

for(int row = 1; row < 18; row++) { 
    for(int col = 1; col < 18; col++) { 
     n = countNeighbors(TempGrid,row,col); 
     ... 

    } 
} 
+0

好,謝謝,但是沒有我路過3種方法'公共靜態INT countNeighbors(最終布爾[] []電網,最終詮釋排,最終int col)'我有我的方法:'countNeighbors(TempGrid);'這是二維數組,'countNeighbors(行);'應該通過'行變量',最後,'countNeighbors(col) ;'應該通過'col變量' – user1714873

+0

你總是需要傳遞2D數組,行和列。爲什麼?因爲你告訴編譯器他會得到這3個變量。 – Burkhard

+0

@ user17您在第一個參數本身中傳遞整個2D數組。 – mtk

相關問題