J'essaie de faire un jeu de hanvlan à JavaFx. Si naturellement, au lieu de faire 26 boutons individuels, j'essaie d'utiliser une boucle pour créer chaque bouton. Je les ai mis dans une arraylist appelé Alphabet et les ajoutant à un flux de flux. Le problème que je passe est lorsque j'essaie de définir l'action de chaque bouton pour accéder à une fonction avec le paramètre de sa lettre qui vérifie si la lettre a été utilisée ou si elle est dans le mot.
Tout Les instanciations: p> fonction de lettre de lettre (actuellement vide) p> Le code de ma fonction de lancement (): P> 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));
}
4 Réponses :
ou fort> p>
déclarer variables code> utilisé dans
lambda code> doit être
global code>,
final code> ou
effectivement final code> pour sa bonne exécution. Donc, vous pouvez le rendre final car il est local en boucle: p>
lettre de caractère finale = (char) (i + 65); code> p>
lettre code> comme variable globale. p>
Le problème est que vous déclarez Vous pouvez résoudre ceci en déclarant le Voici une autre façon de pouvoir écrire la boucle qui fonctionnera bien: p> Vous pouvez également déclarer lettre code> en dehors de la boucle et tente donc de changer sa valeur à l'intérieur de la boucle. Cela signifie que la Lambda ne peut pas l'utiliser car ce n'est pas une finale finale ou "efficace".
Char code> comme neuf dans la boucle. P>
lettre code> comme
Final code> dans la boucle, mais ce n'est pas nécessaire dans ce cas. Parce que
lettre code> est uniquement attribué une valeur une fois dans la boucle, il est efficacement em>
final code> et la Lamba le sait. P> p >
Le code de travail ressemble à:
List alphabets = IntStream.range(0, 26) .mapToObj(i -> (char) (i + 65)) .map(l -> new Button(String.valueOf(l))) .collect(Collectors.toList()); You can do it in a single line forgive me for the syntax error if you have coz I am typing it from my mobile.