gpt4 book ai didi

java - 如何在 for 循环中制作按钮,并为每个按钮添加 lambda 表达式?

转载 作者:行者123 更新时间:2023-12-02 09:58:47 25 4
gpt4 key购买 nike

我正在尝试用 javafx 制作一个刽子手游戏。因此,很自然地,我尝试使用 for 循环来创建每个按钮,而不是创建 26 个单独的按钮。我将它们放入名为 Alphabet 的 ArrayList 中,并将它们添加到 flowPane 中。我遇到的麻烦是,当我尝试设置每个按钮的操作以转到带有其字母参数的函数时,该函数检查该字母是否已被使用或是否在单词中。

所有实例化:

ArrayList<Button> alphabet = new ArrayList<Button>();
FlowPane keyboard = new FlowPane();

letterGuess函数(当前为空)

public void letterGuess(char letter) {

}

我的 launch() 函数中的代码:

char letter;
for(int i=0 ; i<26 ; i++) {
letter = (char) (i+65);
alphabet.add(new Button("" + letter));
keyboard.getChildren().add(alphabet.get(i));
alphabet.get(i).setOnAction(e -> letterGuess(letter));
}

我希望代码运行时不会出现错误,并成功地将每个按钮的字母传递给 letterGuess()。我得到的错误是在字母Alphabet.get(i).setOnAction(e -> letterGuess(字母));错误表示:在封闭范围内定义的局部变量字母必须是最终的或有效的最终

最佳答案

问题是您在循环外部声明 letter ,从而尝试在循环内部更改它的值。这意味着 lambda 无法使用它,因为它不是最终的或“有效”的最终。

您可以通过在循环中将 char 声明为 new 来解决此问题。

这是另一种编写循环的方法,它可以正常工作:

    for (int i = 0; i < 26; i++) {
char letter = (char) (i + 65);
Button button = new Button(String.valueOf(letter));
button.setOnAction(event -> letterGuess(letter));
alphabet.add(button);
}
<小时/>

您还可以在循环中将 letter 声明为 final,但在这种情况下没有必要。因为letter在循环中只被赋值一次,所以它实际上final并且lamba知道它。

关于java - 如何在 for 循环中制作按钮,并为每个按钮添加 lambda 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55788736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com