部分
if(boton == cartas[0]){
cartas[0].setLabel(figuras[Memorando.list.get(i)]);
}
在我的代码中,我试图输入一个我之前生成的随机数,但是当applet启动它时,当我按下按钮时出现错误,我想将该代码放在所有按钮中,因为我不知道#39;我想要重复的数字,我想为每个按钮随机生成一个数字。我希望你能帮助我。
import javax.swing.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Stack;
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import java.util.*;
public class Memorando extends Applet implements ActionListener {
JButton cartas[];
JButton juegoNuevo;
Label marcador;
public static ArrayList<Integer> list = new ArrayList<Integer>();
public static ArrayList<Integer> random() {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i=0; i<4; i++) {
list.add(new Integer(i));
}
Collections.shuffle(list);
for (int i=0; i<4; i++) {
System.out.println(list.get(i));
}
return list;
}
public void init(){
this.setLayout(new BorderLayout());
this.setBackground(Color.CYAN);
Font appletFont=new Font("Monospased", Font.BOLD, 20);
this.setFont(appletFont);
juegoNuevo=new JButton("Juego nuevo");
juegoNuevo.addActionListener(this);
Panel topPanel=new Panel();
topPanel.add(juegoNuevo);
this.add(topPanel,"North");
cartas=new JButton[8];
Panel panelCentral=new Panel();
panelCentral.setLayout(new GridLayout(2,4));
this.add(panelCentral,"Center");
marcador=new Label("No has ganado aun :(");
this.add(marcador,"South");
for(int i=0;i<8;i++){
cartas[i]=new JButton("*********");
cartas[i].addActionListener(this);
cartas[i].setBackground(Color.WHITE);
panelCentral.add(cartas[i]);
}
}
public void actionPerformed(ActionEvent e) {
JButton boton=(JButton) e.getSource();
String[] figuras=new String[8];
figuras[0]="♥";
figuras[1]="♣";
figuras[2]="♠";
figuras[3]="♦";
if(boton == juegoNuevo){
for(i=0;i<8;i++){
cartas[i].setEnabled(true); cartas[i].setLabel("*********");
cartas[i].setBackground(Color.CYAN);
}
marcador.setText("Juego nuevo");
juegoNuevo.setEnabled(false);
return;
}
if(boton == cartas[0]){
cartas[0].setLabel(figuras[Memorando.list.get(0)]);
}
if(boton == cartas[1]){
int numAleatorio=(int) (Math.random()*4);
cartas[1].setLabel(figuras[numAleatorio]);
}
if(boton == cartas[2]){
int numAleatorio=(int) (Math.random()*4);
cartas[2].setLabel(figuras[numAleatorio]);
}
if(boton == cartas[3]){
int numAleatorio=(int) (Math.random()*4);
cartas[3].setLabel(figuras[numAleatorio]);
}
if(boton == cartas[4]){
int numAleatorio=(int) (Math.random()*4);
cartas[4].setLabel(figuras[numAleatorio]);
}
if(boton == cartas[5]){
int numAleatorio=(int) (Math.random()*4);
cartas[5].setLabel(figuras[numAleatorio]);
}
if(boton == cartas[6]){
int numAleatorio=(int) (Math.random()*4);
cartas[6].setLabel(figuras[numAleatorio]);
}
if(boton == cartas[7]){
int numAleatorio=(int) (Math.random()*4);
cartas[7].setLabel(figuras[numAleatorio]);
}
}
void finDelJuego(){
juegoNuevo.setEnabled(true);
for(int i=0;i<8;i++){
cartas[i].setEnabled(false);
}
}
}
我得到的错误是 线程中的异常&#34; AWT-EventQueue-1&#34; java.lang.IndexOutOfBoundsException:Index:0,Size:0
答案 0 :(得分:0)
很难说,因为我们没有关于你如何/是否调用所有这些方法的证据,但我可以告诉你,我注意到你有一个成员变量list
,但是在random()
方法中,您声明并使用可能涵盖成员变量的本地变量。因此,成员变量list
可能会保持为空,当您尝试在actionPerformed()
中访问该成员变量时,该变量将为空{&1;}使用成员变量list
,因此任何索引都将超出范围。
因此,我建议您从list
方法中删除random
的声明。