2015-12-08 20 views
-1

搜索过但找不到解决此问题的任何内容。对象的Java数组,无法转换为类型

我们正试图创建一个“记忆游戏”,它使用卡片作为对象并将卡片数组打印到控制台中。当试图用初始值创建一个卡片阵列时,我们得到错误“MemoryGame.java:25: error: incompatible types: int cannot be converted to Card”。

MemoryGame:

import java.util.Random; 

public class MemoryGame{ 
final int BOARD_SIZE = 4; 
final int NUM_SWAPS = 1000; 
private Card[][] cards; 
Random rand = new Random(); 

public void memoryGameBoard() { 
    cards = new Card[BOARD_SIZE][BOARD_SIZE]; 
    initializeCards(); 
} 

private void initializeCards() { 
    int row, col; 
    int cardvalue = 1; 
    for (row = 0; row < (BOARD_SIZE/2); row++) { 
     for (col = 0; col < BOARD_SIZE; col++){ 
      cards[row][col] = cardvalue; 
      cardvalue++; 
     } 
    } 
    for (row = 2; row <= (BOARD_SIZE - 1); row++) { 
     for (col = 0; col < BOARD_SIZE; col++){ 
      cards[row][col] = cardvalue; 
      cardvalue++; 
     } 
    } 
} 

/*private void initializeCards() { 
    Card[] cards = new Card[numcards]; 
    for (int i = 0; i <= numcards - 1; i++) { 
     int a = 0; 
     cards[i] = a; 
     a++; 
     if (a == 9) { 
      a = 0; 
     } 
    } 
}*/ 

public void shuffleCards() { 
    int row1, col1, row2, col2; 
    Card temp; 
    for (int i = 0; i < NUM_SWAPS; i++){ 
     row1 = rand.nextInt(BOARD_SIZE); 
     col1 = rand.nextInt(BOARD_SIZE); 
     row2 = rand.nextInt(BOARD_SIZE); 
     col2 = rand.nextInt(BOARD_SIZE); 

     temp = cards[row1][col1]; 
     cards[row1][col1] = cards[row2][col2]; 
     cards[row2][col2] = temp; 
    } 
} 

public void showBoard() { 
    hideBoard(); 
    System.out.println(this) = System.out.println(this.toString()); 
} 

public boolean cardsMatch(int row1, int col1, int row2, int col2) { 
    return cards[row1][col1].getValue() == cards[row2][col2].getValue(); 
} 

public boolean isFaceUp(int row, int col) { 
    return cards[row][col].isFaceUp(); 
} 

public void flipCards(int row1, int col1,int row2, int col2) { 
    cards[row1][col1].flipCard(); 
} 

public String toString() { 
    int col, row; 
    String s = " "; 
    s = s + " 1 2 3 4\n" + "=======\n"; 
    for (row = 1; row <= BOARD_SIZE; row++) { 
     s = s + (row + "|"); 
     for (col = 1; col <= BOARD_SIZE; col++) { 
      s = s + (cards[row][col] + " "); 
     } 
     s = s + "\n"; 
    } 
} 

private void hideBoard() { 
    for (int i = 0; i <= 10; i++) { 
     System.out.println(); 
    } 
} 

private void cardsFaceDown() { 

} 
} 

和卡:

public class Card { 
private int value; 
private boolean faceup = false; 

public void card(int v) { 
    value = v; 
    faceup = false; 
} 

public boolean isFaceUp() { 
    return faceup; 
} 

public int getValue() { 
    return value; 
} 

public void flipCard() { 
    if (faceup) { 
     faceup = false; 
    } else 
     faceup = true; 
} 
} 

该标记行是initializeCards();下试图设置一个值到卡的阵列中时。我们似乎无法得出它的价值。我们正试图初始化它们在此布局:

ÏÏÏ  1 2 3 4 
ÏÏÏ ========= 
ÏÏÏ 1 | 1 2 3 4 | 
ÏÏÏ 2 | 5 6 7 8 | 
ÏÏÏ 3 | 1 2 3 4 | 
ÏÏÏ 4 | 5 6 7 8 | 
ÏÏÏ ========= 

的代码还没有完成,我们目前正在试图让我们的代码编译原样。

谢谢。

+0

仅基于错误消息,您认为错误的含义是什么? –

+0

'cards [row] [col] = Card.card(cardvalue);'看看那行代码,看看它有什么问题。 – 3kings

+0

...与此行比较:'cards [row] [col] = cardvalue;' – br3nt

回答

0

错误消息指示您正在尝试将int值分配给期望Card对象的变量。在第25行(和第19行)

寻找则有以下:

cards[row][col] = cardvalue; 

cardvalueint类型和cards[row][col]期待一个Card对象。

所以,你有两个选择:

  1. 转换cardvalue到卡。例如。在你的问题的一个编辑你有cards[row][col] = Card.card(cardvalue);
  2. 变化private Card[][] cards;private int[][] cards;
1

我能找到的构造函数的详细信息,并理解了它归功于从一些指导意见。我使用cards[row][col] = new Card(cardvalue);

感谢指导家伙!

相关问题