我为宾果游戏创建了一个课程。我收到一条错误,上面写着''课程'预期“。如何将数组中的值返回给主启动器? 任何其他评论也会有所帮助。 谢谢。
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[][];
}
}
答案 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";
但ArrayBoard
是int
数组,您无法向其成员添加字符串"\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)
我真的不明白你的问题,但我有几点意见。
对于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);
}
}