2010-11-10 91 views
1

我爲賓果遊戲創建了一個類。我收到一個錯誤,提示「'class'expected」。我怎麼能將數組中的值返回給主啓動器? 任何其他意見也將有所幫助。 謝謝。Java:從類中打印/返回數組

import java.util.Random; 
public class Card 
{ 
    Random generator = new Random(); 

    private final int BOARDMAX = 4; 
    private final int NUMMAX = 59; 
    int i, j, m, n; 
    private int [][] ArrayBoard = new int[BOARDMAX][BOARDMAX]; 
    String [][] StrArrayBoard = new String [BOARDMAX][BOARDMAX]; 

    public void RandomNumGenerator() 
    { 
     for (i = 0; i<BOARDMAX; i++) 
     { 
      for (j = 0; j<BOARDMAX; j++) 
      { 
       ArrayBoard[i][j] = generator.nextInt (NUMMAX+1); 
      } 
     } 

    } 

    public String ShowBoard() 
    { 
     for (i = 0; i<BOARDMAX; i++) 
     { 
      for (j = 0; j<BOARDMAX; j++) 
      { 
       m=i; 
       n=j; 
       if (j != BOARDMAX) 
        StrArrayBoard[m][n] = ArrayBoard[m][n] + " "; 
       else 
        StrArrayBoard[m][n] = ArrayBoard[m][n] + " \n"; 
      } 
     } 
     return StrArrayBoard[i][j]; 
    } 

    public void ShowMark() 
    { 
     for (i = 0; i<BOARDMAX; i++) 
     { 
      for (j = 0; j<BOARDMAX; j++) 
      { 
       if (CardCheck [i][j] == 1) 
        StrArrayBoard[i][j] = ArrayBoard[i][j] + "* "; 
       else 
        StrArrayBoard[i][j] = ArrayBoard[i][j] + " "; 
       if (j == BOARDMAX) 
        ArrayBoard[i][j] = ArrayBoard[i][j] + "\n"; 
      } 
     } 
    } 

    public String toString() 
    { 
     return ArrayBoard[][]; 
    } 
} 
+1

您的代碼簡化版,遵循慣例,會更容易些,如果你的名字你不變量以大寫字母開始讀取... – 2010-11-10 08:45:02

+0

爲什麼「ArrayBoard」以藍色,彷彿是一個類名?是因爲阿洛伊斯說了什麼? – Anurag 2010-11-10 08:52:14

回答

1

With toString()您需要返回String對象,但實際上您嘗試返回int[][]。對於ShowBoard也是如此,您嘗試返回不是兼容類型的Stringarrays數組。

這裏的修復:

public String ShowBoard() { 
    // your code to populate StrArrayBoard 

    StringBuilder boardBuilder = new StringBuilder(); 
    for (String[] row:StrArrayBoard) 
    for (String cell:row) 
     sb.append(cell); 
    return boardBuilder.toString(); 
} 

public String toString() { 
    return ShowBoard(); 
} 

我建議重構代碼,並將其重命名方法和字段:

ShowBoard() --> getBoardAsString() 
ArrayBoard --> arrayBoard 
StrArrayBoard --> strArrayBoard 

而且也沒有必要宣佈StrArrayBoard作爲一個字段(類成員)僅僅因爲你只需要它在ShowBoard方法中。在那裏聲明它作爲一個局部變量。

0
public String toString() 
    { 
     return ArrayBoard[][]; 
    } 

這個方法只需要返回一個字符串,但你是返回一個二維整數數組,你需要的是一個字符串。 toString()方法返回對象的字符串表示形式,因此在這種情況下,可以執行的操作是使用StringBuilder構建數組的字符串表示形式,然後使用StringBuilder的.toString()返回字符串表示形式2D陣列。

此外,正如Alois Cochard所指出的那樣,變量命名不符合約定。 Java中的變量名稱使用camel case表示法。

0

我一個人並不真正瞭解你的問題,但我有幾個意見。

  • 類變量i和j應該是每個方法中的局部變量。
  • 您的命名約定是非標準的,看起來像更多的C#約定。用小寫開始變量和方法名稱。
  • CardCheck沒有在任何地方定義。我認爲這是爲了表示是否已檢查過正方形上的數字,在這種情況下,它應該是布爾值而不是整數。
  • toString不返回一個字符串。你可以使用Arrays.toString來幫助你。
  • 同樣,ShowBoard只返回數組中的一個元素,您可能想要在那裏顯示整個板子。

對於您的toString和ShowBoard方法,您可能希望使用StringBuilder來構建字符串表示。

 StringBuilder builder = new StringBuilder(); 
     for (int i=0; i<BOARDMAX; i++) { 
      for (int j=0; j<BOARDMAX; j++) { 
       builder.append(StrArrayBoard[i][j]); 
      } 
      builder.append('\n'); 
     } 
     return builder.toString(); 
1

添加到其他人所指出的錯誤:

你有if (CardCheck [i][j] == 1),但陣列CardCheck不被任何聲明。

你有ArrayBoard[i][j] = ArrayBoard[i][j] + "\n";ArrayBoardint數組,你不能添加一個字符串"\n"到它的成員。

1

編譯器會抱怨,因爲您的代碼錯誤:

public String toString() 
{ 
    return ArrayBoard[][]; 
} 

它不能轉換int[][](這是你的ArrayBoard)到String。我的建議是,您將存儲在StrArrayBoard中的所有值存儲在StringBuffer中,並返回toString()方法中的StringBuffer.toString()

toString()方法需要一個字符串。

希望這會有所幫助。

0

下面是您編譯的類的一個版本(並且我更改了一些字段名稱和修飾符以遵守標準約定)。試試這個:

public class Card{ 

    private final Random generator = new Random(); 

    private static final int BOARDMAX = 4; 
    private static final int NUMMAX = 59; 
    int i, j, m, n; 
    private final int[][] arrayBoard = new int[BOARDMAX][BOARDMAX]; 
    private final String[][] strArrayBoard = new String[BOARDMAX][BOARDMAX]; 

    // do something here please 
    private int[][] CardCheck; 

    public void RandomNumGenerator(){ 
     for(i = 0; i < BOARDMAX; i++){ 
      for(j = 0; j < BOARDMAX; j++){ 
       arrayBoard[i][j] = generator.nextInt(NUMMAX + 1); 
      } 
     } 

    } 

    public String ShowBoard(){ 
     for(i = 0; i < BOARDMAX; i++){ 
      for(j = 0; j < BOARDMAX; j++){ 
       m = i; 
       n = j; 
       if(j != BOARDMAX){ 
        strArrayBoard[m][n] = arrayBoard[m][n] + " "; 
       } else{ 
        strArrayBoard[m][n] = arrayBoard[m][n] + " \n"; 
       } 
      } 
     } 
     return strArrayBoard[i][j]; 
    } 

    public void ShowMark(){ 
     for(i = 0; i < BOARDMAX; i++){ 
      for(j = 0; j < BOARDMAX; j++){ 
       if(CardCheck[i][j] == 1){ 
        strArrayBoard[i][j] = arrayBoard[i][j] + "* "; 
       } else{ 
        strArrayBoard[i][j] = arrayBoard[i][j] + " "; 
       } 
       if(j == BOARDMAX){ 
        // this is probably what you mean: 
        strArrayBoard[i][j] = arrayBoard[i][j] + "\n"; 
       } 
      } 
     } 
    } 

    @Override 
    public String toString(){ 
     // this is probably what you mean: 
     return Arrays.deepToString(strArrayBoard); 
    } 
}