Java中的内部类

new*_*bie 5 java

我正在为我的Hangman游戏制作类似键盘的按钮(参见图片),我的问题是关于内部课程.我已经读过关于内部类的LINK,它说你只能用FINAL类型访问外部变量.但是如果我这样声明变量,我就不能再改变它的值......所以我的问题是我需要改变内部类中的值.我的代码如下:

public class MainGame extends JDialog {

    private String player;
    private char [] wordChar;
    private JButton[] buttons;
    private int level;
    private int score;
    private int livesLeft;
    private int missedGuess;

 void newGame() {

        level = 0;
        score = 0;
        livesLeft = 10;
        missedGuess = 0;

       //label1:
       // while (livesLeft!= 0) {

            //get random WORD from LIST
            Word hiddenWord = new Word();

            //put random word in Array
            wordChar = new char[hiddenWord.getHiddenWord().length()];
            wordChar = hiddenWord.getHiddenWord().toCharArray();

            buttons = new JButton[wordChar.length];
            for (int i = 0; i < wordChar.length; i++){
                JButton guessWord = new JButton(" ");
                guessWord.setFont(new Font("Microsoft Sans Serif", 1, 18));
                guessWord.setEnabled(false);

                jPanel3.setLayout(new GridLayout(1, wordChar.length));
                jPanel3.add(guessWord);

                buttons[i] = guessWord;
            }
      checkLetter();
      }

    void checkLetter() {
         int checker = 0;
         while(checker != wordChar.length){
            jPanel1.setLayout(new GridLayout(3, 9, 3, 5));
            for (char buttonChar = 'a'; buttonChar <= 'z'; buttonChar++) {
                String buttonText = String.valueOf(buttonChar);
                final JButton letterButton = new JButton(buttonText);
                letterButton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        String actionCommand = e.getActionCommand();
                        for (int j = 0; j < wordChar.length; j++){
                            String text =  String.valueOf(wordChar[j]);
                            if(actionCommand.equals(text)){
                                buttons[j].setText(text);
                                checker++; //THIS CODE IS NOT POSSIBLE!!!!
                            }
                        }
                    }
                });
                jPanel1.add(letterButton);
             }
               checker++;
          }
        }
Run Code Online (Sandbox Code Playgroud)

注意:上面的代码不完整.int检查器用于计算已经猜到多少个正确的字母,这样如果它等于单词的长度,我现在可以进入下一个级别在此输入图像描述

我该如何重新编写代码?

Kel*_*Kel 3

您可以声明checker为外部类的字段,并使用某种方法访问它,例如increaseChecker().

更新:是这样的:

1)在外部类中创建检查字段:

public class OuterClassName {
    private int checker;

    protected void increaseChecker() {
        checker++;
    }

    void checkLetter() {
        // ...
    }

}
Run Code Online (Sandbox Code Playgroud)

2)使用increaseChecker()方法调用代替checker++