0
votes

Comment puis-je créer des boutons dans A pour une boucle avec une expression Lambda pour chacun?

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> xxx pré>

fonction de lettre de lettre (actuellement vide) p> xxx pré>

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));
}


0 commentaires

4 Réponses :


0
votes

variables utilisé dans lambda doit être global , final ou effectivement final pour sa bonne exécution. Donc, vous pouvez le rendre final car il est local en boucle:

lettre de caractère finale = (char) (i + 65);

ou

déclarer lettre comme variable globale.


0 commentaires

1
votes

Le problème est que vous déclarez lettre 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".

Vous pouvez résoudre ceci en déclarant le Char comme neuf dans la boucle.

Voici une autre façon de pouvoir écrire la boucle qui fonctionnera bien: xxx


Vous pouvez également déclarer lettre comme Final dans la boucle, mais ce n'est pas nécessaire dans ce cas. Parce que lettre est uniquement attribué une valeur une fois dans la boucle, il est efficacement final et la Lamba le sait.


0 commentaires

0
votes

Le code de travail ressemble à: xxx


0 commentaires

0
votes
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.

0 commentaires