Java:从类打印/返回数组

Java:从类打印/返回数组,java,class,multidimensional-array,return-value,Java,Class,Multidimensional Array,Return Value,我为宾果游戏创建了一个类。我收到一个错误,说“预期为'class'。如何将数组中的值返回给主启动器? 任何其他评论也会有所帮助。 多谢各位 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; p

我为宾果游戏创建了一个类。我收到一个错误,说“预期为'class'。如何将数组中的值返回给主启动器? 任何其他评论也会有所帮助。 多谢各位

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[][];
    }
}
import java.util.Random;
公务舱卡
{
随机生成器=新随机();
私人最终int BOARDMAX=4;
私人最终整数=59;
int i,j,m,n;
私有int[][]阵列板=新int[BOARDMAX][BOARDMAX];
字符串[][]StrArrayBoard=新字符串[BOARDMAX][BOARDMAX];
public void RandomNumGenerator()
{
对于(i=0;i
此方法希望返回字符串,但您返回的是二维整数数组,您需要的是字符串。
toString()
方法返回对象的字符串表示形式,因此在本例中,您可以使用StringBuilder构建数组的字符串表示形式,然后使用.toString()返回表示二维数组的字符串

此外,正如Alois Cochard所指出的,变量命名不遵循约定。Java中的变量名使用符号。

使用
toString()
您需要返回
字符串
对象,但实际上您尝试返回
int[]
。对于
ShowBoard
,同样如此,您尝试返回一个不兼容类型的StringArray数组

以下是修复方法:

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

没有必要仅仅因为您只需要在
ShowBoard
方法中就将StrArrayBoard声明为字段(类成员)。将其声明为局部变量。

我并不真正理解您的问题,但我有几点意见

  • 类变量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();
StringBuilder=新建StringBuilder();

对于(int i=0;i添加到其他人指出的错误中:

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


您有
ArrayBoard[i][j]=ArrayBoard[i][j]+“\n”
但是
ArrayBoard
是一个
int
数组,您不能将字符串
“\n”
添加到它的成员中。

编译器会因为您的代码错误而抱怨:

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

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


希望这有帮助。

这是一个编译类的版本(我更改了一些字段名和修饰符以遵守标准约定)。请尝试以下操作:

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);
    }
}
公共类卡{
专用最终随机生成器=新随机();
专用静态最终int BOARDMAX=4;
私有静态最终整数NUMMAX=59;
int i,j,m,n;
私有最终整数[][]阵列板=新整数[BOARDMAX][BOARDMAX];
私有最终字符串[][]strArrayBoard=新字符串[BOARDMAX][BOARDMAX];
//请在这里做点什么
私人int[][]卡支票;
public void RandomNumGenerator(){
对于(i=0;i
您的代码没有遵循惯例,如果您命名变量时不以大写字母开头,会更容易阅读……为什么蓝色的“ArrayBoard”好像是一个类名?这是因为Alois所说的吗?
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);
    }
}