2010-11-10 18 views
1

J'ai créé une classe pour un jeu de bingo. Je reçois une erreur disant "'classe' attendu". Comment est-ce que je pourrais renvoyer les valeurs dans le tableau au démarreur principal? D'autres commentaires seraient également utiles. Merci.Java: Impression/retour d'un tableau à partir d'une classe

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

Votre code does't suivre les conventions, serait plus facile à lire si vous nommez votre variable sans commencer par une lettre majuscule ... –

+0

Pourquoi est « ArrayBoard » en bleu comme si son nom de classe ? est-ce à cause de ce qu'a dit Alois? – Anurag

Répondre

1

Avec toString() vous devez retourner un objet String mais en réalité vous essayez de retourner un int[][]. La même chose est vraie pour ShowBoard, vous essayez de retourner un tableau de Stringarrays qui n'est pas un type compatible.

est ici le correctif:

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(); 
} 

Je propose à factoriser le code et renommer les méthodes et les champs:

ShowBoard() --> getBoardAsString() 
ArrayBoard --> arrayBoard 
StrArrayBoard --> strArrayBoard 

Et il n'y a pas besoin de déclarer StrArrayBoard comme un champ (membre de la classe) juste parce que vous en avez seulement besoin dans la méthode ShowBoard. Déclarez-la comme une variable locale.

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

Cette méthode s'attend à retourner une chaîne mais vous retournez un tableau 2D entier, ce dont vous avez besoin est une chaîne. la méthode toString() renvoie une représentation de chaîne de l'objet, dans ce cas, ce que vous pouvez faire est d'utiliser un StringBuilder pour générer la représentation de chaîne du tableau, puis, utilisez le .toString() de StringBuilder pour renvoyer la chaîne représentant le tableau 2D.

De même, comme l'a noté Alois Cochard, le nommage des variables ne suit pas la convention. Les noms de variables en Java utilisent une notation camel case.

0

Pour ma part, je ne comprends pas vraiment votre question, mais j'ai quelques commentaires.

  • Les variables de classe i et j doivent être des variables locales dans chaque méthode.
  • Votre convention de nommage n'est pas standard, semble être une convention plus C#. Commencez les noms de variable et de méthode avec un minuscule.
  • CardCheck n'est défini nulle part. Je suppose qu'il est destiné à indiquer si un nombre sur un carré a été vérifié, auquel cas il devrait être un booléen et non un int.
  • toString ne renvoie pas de chaîne. Vous pouvez utiliser Arrays.toString pour vous aider.
  • Similairement, ShowBoard renvoie juste un élément d'un tableau, vous vouliez probablement montrer la totalité du tableau là.

Pour vos méthodes toString et ShowBoard, vous voulez probablement utiliser un StringBuilder pour construire la représentation sous forme de chaîne.

 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(); 
1

Ajout aux insectes autres ont fait:

Vous avez if (CardCheck [i][j] == 1), mais le tableau CardCheck n'a pas été déclarée nulle part.

Vous avez ArrayBoard[i][j] = ArrayBoard[i][j] + "\n"; mais ArrayBoard est un tableau int, vous ne pouvez pas ajouter une chaîne "\n" à c'est membre.

1

Le compilateur se plaindra du fait de l'erreur sur votre code:

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

Il ne peut pas convertir int[][] (qui est votre ArrayBoard) à String. Ma suggestion est que vous remplissez toutes les valeurs stockées dans StrArrayBoard dans un StringBuffer et renvoyez le StringBuffer.toString() dans la méthode toString().

La méthode toString() nécessite une chaîne.

Espérons que cela aide.

0

Voici une version de votre classe qui compile (et j'ai modifié certains noms de champs et modificateurs pour respecter les conventions standard). Essayez ceci:

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); 
    } 
}