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.