通过for循环将方法应用于数组
Apply method to array through for loop
我正在尝试通过 for 循环将方法应用于数组数组。
不幸的是,当我在 checkGuess 方法中插入我的数组时,出现了错误 'Local variable x defined in an enclosing scope must be final or effectively final'。我是 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;
}
}
附加信息:
数组的数组包含 JButton。
checkGuess() 方法将 JButton 作为参数,如下所示:
checkGuess(JButton guess){
}
ActionListener 是一个内部匿名的 class 并且在将数组数组传递给函数 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 传递给 class。
我相信 "this" 将引用 class 的父项,它应该是 'columns[x][y]。不过我可能是错的。
在 Java 中,在匿名 class 中使用的变量必须是最终的(或者在 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]);
}
});
}
我正在尝试通过 for 循环将方法应用于数组数组。
不幸的是,当我在 checkGuess 方法中插入我的数组时,出现了错误 'Local variable x defined in an enclosing scope must be final or effectively final'。我是 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;
}
}
附加信息:
数组的数组包含 JButton。 checkGuess() 方法将 JButton 作为参数,如下所示:
checkGuess(JButton guess){
}
ActionListener 是一个内部匿名的 class 并且在将数组数组传递给函数 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 传递给 class。
我相信 "this" 将引用 class 的父项,它应该是 'columns[x][y]。不过我可能是错的。
在 Java 中,在匿名 class 中使用的变量必须是最终的(或者在 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]);
}
});
}