我正在制作一个测验程序,询问用户简单的数学问题,收到答案,计算用户的分数等......
我收到错误,因为我在actionListener中使用了一个变量(在本例中为x):
for(x = 0;x < total;x++){
System.out.print((x+1)+". ");
questionLabel.setText(number1" + "+ number2);
answerButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
int returnedAns = Integer.parseInt(answerTextField.getText());
if(returnedAns == answerToTheQuestion){
score++;
System.out.println("correct");
question[x].result = true;
}else{
System.out.println("wrong");
question[x].result = false;
}
try{
Thread.sleep(500);
}catch(Exception e){}
}
});
}
当我运行我的代码时,它突出显示int x并且说'从内部clas引用的局部变量必须是最终的或有效的最终'。
请帮帮我,我真的不知道要做些什么。
我无法将其标记为final,因为我需要能够将其更改为for循环才能工作...
答案 0 :(得分:3)
最好的方法是为此ActionListener实现定义一个额外的类。
public class NumberedActionListener implements ActionListener {
private int number;
public NumberedActionListener(int number) {
this.number = number;
}
@Override
public void actionPerformed(ActionEvent e) {
// ...
}
}
然后你可以将一个int值传递给构造函数。
answerButton.addActionListener(new NumberedActionListener(x));
如果您喜欢干净的代码,这看起来也会更好......
答案 1 :(得分:1)
您可以将x
的值分配给for
- 循环内的另一个变量,然后将该变量设为最终。
for(x = 0;x < total;x++){
final int index = x;
// use index inside your actionListener
}