Java:从类中打印/返回数组

时间:2010-11-10 08:43:18

标签: java class multidimensional-array return-value

我为宾果游戏创建了一个课程。我收到一条错误,上面写着''课程'预期“。如何将数组中的值返回给主启动器? 任何其他评论也会有所帮助。 谢谢。

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[][];
    }
}

6 个答案:

答案 0 :(得分:1)

使用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方法中使用它。将其声明为局部变量。

答案 1 :(得分:1)

添加其他人指出的错误:

您有if (CardCheck [i][j] == 1),但数组CardCheck未在任何地方声明。

您有ArrayBoard[i][j] = ArrayBoard[i][j] + "\n";ArrayBoardint数组,您无法向其成员添加字符串"\n"

答案 2 :(得分:1)

由于代码错误,编译器会抱怨:

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

它无法将int[][](您的ArrayBoard)转换为String。我的建议是,您在StrArrayBoard中填充StringBuffer中存储的所有值,并在StringBuffer.toString()方法中返回toString()

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

希望这有帮助。

答案 3 :(得分:0)

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

此方法需要返回一个String,但是你要返回一个2D Integer数组,你需要的是一个String。 toString()方法返回对象的字符串表示,所以在这种情况下,你可以做的是使用StringBuilder来构建数组的字符串表示,然后使用StringBuilder的.toString()来返回表示2D数组的字符串。

另外,正如Alois Cochard所指出的,变量命名不符合惯例。 Java中的变量名使用camel case表示法。

答案 4 :(得分:0)

我真的不明白你的问题,但我有几点意见。

  • 类变量i和j应该是每个方法中的局部变量。
  • 您的命名约定是非标准的,似乎更像是一个C#约定。使用小写字母启动变量和方法名称。
  • CardCheck未在任何地方定义。我认为这是为了表明是否已经检查了正方形上的数字,在这种情况下它应该是布尔值而不是int。
  • 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();

答案 5 :(得分: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);
    }
}