我已經通過相同類型的其他一些問題看,並試圖找到答案,但我沒能看到什麼是錯的,如果有人可以點它對我來說將是偉大的!異常線程「main」 java.lang.ArrayIndexOutOfBoundsException:8
所以基本上我創建一個「記憶遊戲」中,我有一個默認背景圖片設置爲每個卡,但這一形象各有我再次運行時間來改變。另外,我需要使用前景圖像(21個)創建和排列列表,但每場只能使用8個。每次我運行程序時,他們也必須改變。這就是說,我走到這一步是:
public class GameBoard extends javax.swing.JPanel implements Runnable {
private JLabel[] _Labels = new JLabel[8];
private Card[] _Cards = new Card[16];
public GameBoard(){
setLayout(new GridLayout(4, 4));
for(int i = 0; i<8; i=i+1){
_Labels[i] = new JLabel();
}
for(int i = 0; i<16; i=i+2){
_Cards[i] = new Card(_Labels[i]);
_Cards[i+1] = new Card(_Labels[i]);
add(_Cards[i].getLabel());
add(_Cards[i+1].getLabel());
_Labels[i].addMouseListener(new LabelListener(_Cards[i]));
_Labels[i+1].addMouseListener(new LabelListener(_Cards[i+1]));
}
}
@Override
public void run() {
}
}
卡類:
public class Card{
private JLabel _Label;
ImageIcon imageOne;
ImageIcon imageTwo;
public Card(JLabel once){
_Label = once;
//-----------------------Foreground--------------------------------
ArrayList<String> foregroundCard = new ArrayList<String>();
int i = 1;
while(i < 23){
if(i > 9){
String addGreaterNine = "F" + i + ".png";
foregroundCard.add(addGreaterNine);
}
else{
String addLesserNine = "F0" + i +".png";
foregroundCard.add(addLesserNine);
}
i = i + 1;
}
//-----------------Add 8---------------------
int a = 0;
while(a < 8){
Collections.shuffle(foregroundCard);
ArrayList<String> stringsGoingToBeUsed = new ArrayList<String>();
stringsGoingToBeUsed.add(foregroundCard.get(0));
stringsGoingToBeUsed.add(foregroundCard.get(0));
for(int l = 0; l<16; l=l+1){
Collections.shuffle(stringsGoingToBeUsed);
String frontName = "Images/" + stringsGoingToBeUsed.get(0);
imageOne = new ImageIcon(frontName);
}
a = a + 1;
}
//------------------------Background--------------------------------
ArrayList<String> backgroundCard = new ArrayList<String>();
backgroundCard.add("B01.png");
backgroundCard.add("B02.png");
backgroundCard.add("B03.png");
Collections.shuffle(backgroundCard);
String location = "Images/" + backgroundCard.get(0);
imageTwo = new ImageIcon(location);
//-------------------------------------------------------------------
_Label.setIcon(imageTwo);
}
public void TurnCard(){
ImageIcon temp;
temp = imageTwo;
imageTwo = imageOne;
imageOne = temp;
_Label.setIcon(imageTwo);
}
public JLabel getLabel(){
return _Label;
}
}
而且LabelListener類:
public class LabelListener implements MouseListener {
private Card _Card;
public LabelListener(Card c){
_Card = c;
}
@Override
public void mouseClicked(MouseEvent arg0) {
_Card.TurnCard();
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
的主要方法是:
public class Game {
public static void main(String[] args) {
JFrame main = new JFrame("Memory Game");
main.add(new GameBoard());
main.pack();
main.setVisible(true);
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
-1不包括異常跟蹤(包括行號,並指向你就在錯誤)。 – 2013-04-23 02:43:43