我试图通过for循环将方法应用于数组数组。
不幸的是,我在checkGuess方法中插入了我的数组数组,我得到错误'在封闭范围内定义的局部变量x必须是最终的或有效的最终'。我对Java有点新意,所以我不确定我做错了什么......非常感谢任何帮助。
for(int x = 0; x < columns.length; x++){
columns[x][y].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
checkGuess(columns[x][y]);
}
});
if(x>4 && y<5){
y++;
x=-1;
}
}
其他信息:
数组数组包含JButtons。 checkGuess()方法将JButton作为参数,如下所示:
checkGuess(JButton guess){
}
答案 0 :(得分:0)
ActionListener是一个内部匿名类,它在将数组数组传递给函数checkGuess()时尝试读取它时不知道'x'是什么。
未经测试,但这可能有效:
for(int x = 0; x < columns.length; x++){
columns[x][y].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
checkGuess(this);
}
});
if(x>4 && y<5){
y++;
x=-1;
}
}
如果没有,您需要了解如何将x传递给班级。
我相信“this”将引用类的父级,它应该是'columns [x] [y]。我可能错了。
答案 1 :(得分:0)
在Java中,匿名类中使用的变量必须是最终的(或者在Java 8中,实际上是最终的 - 基本上是相同的,只是没有明确的final
修饰符)。至于为什么会这样,Jon Skeet对这个here有一个非常好的答案。
更正代码的一种方法是将x
分配给最终引用,如下所示:
for (int x = 0; x < columns.length; x++) {
final int copy = x;
columns[x][y].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
checkGuess(columns[copy][y]);
}
});
}