Java: печать / возврат массива из класса - PullRequest
1 голос
/ 10 ноября 2010

Я создал класс для игры в бинго.Я получаю сообщение об ошибке "класс" ожидается ".Как я могу вернуть значения в массиве к основному стартеру?Любые другие комментарии также будут полезны.Спасибо.

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 ]

1 голос
/ 10 ноября 2010

Компилятор будет жаловаться из-за ошибки в вашем коде:

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

Он не может преобразовать int[][] (который является вашим ArrayBoard) в String.Я предлагаю заполнить все значения, хранящиеся в StrArrayBoard, в StringBuffer и вернуть StringBuffer.toString() в методе toString().

Для метода toString() требуется строка.

Надеюсь, это поможет.

1 голос
/ 10 ноября 2010

Добавление к ошибкам, на которые указывают другие:

У вас есть if (CardCheck [i][j] == 1), но массив CardCheck нигде не объявлен.

У вас есть ArrayBoard[i][j] = ArrayBoard[i][j] + "\n";, но ArrayBoard - это массив int, вы не можете добавить строку "\n" в его член.

1 голос
/ 10 ноября 2010

С 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 голосов
/ 10 ноября 2010

Вот версия вашего класса, которая компилируется (и я изменил некоторые имена полей и модификаторы, чтобы придерживаться стандартных соглашений).Попробуйте это:

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);
    }
}
0 голосов
/ 10 ноября 2010

Я, например, не очень понимаю ваш вопрос, но у меня есть пара комментариев.

  • Переменные класса 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();
0 голосов
/ 10 ноября 2010
    public String toString()
    {
        return ArrayBoard[][];
    }

Этот метод ожидает возврата строки, но вы возвращаете двумерный массив Integer, который вам нужен - строка.метод toString() возвращает строковое представление объекта, поэтому в этом случае вы можете использовать StringBuilder для построения строкового представления массива, а затем использовать .toString () StringBuilder для возвратаСтрока, представляющая 2D-массив.

Также, как отмечает Алоис Кочард, присвоение имен вашим переменным не соответствует соглашению.Имена переменных в Java используют нотацию верблюда .

...