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