首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java Swing 猜數字遊戲:計數器變數作用域錯誤導致次數統計失效修正

     編輯:程式設計綜合問答

錯誤程式碼片段


public void actionPerformed(ActionEvent e) {
    int count = 0; // 每次點擊重置為 0!
    if (e.getSource() == confButton) {
        // ...
        if (guessnumber == number) {
            Rightlb.setText("猜對了!你一共猜了" + count + "次");
        }
    }
}

問題分析

count 宣告在 actionPerformed 方法內部,屬於**區域變數**,每次事件觸發都會重新初始化為 0。

修正:提升為成員變數


class GameFrame extends JFrame implements ActionListener {
    // ... 其他欄位
    private int guessCount = 0; // 成員變數,生命週期 = 視窗實例

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == getButton) {
            number = (int)(Math.random() * 100) + 1;
            guessCount = 0; // 重新開始遊戲歸零
            getButton.setEnabled(false);
        }
        if (e.getSource() == confButton) {
            guessCount++; // 遞增
            int guessnumber = Integer.parseInt(jtf.getText());
            if (guessnumber > number) Rightlb.setText("猜大了!");
            else if (guessnumber < number) Rightlb.setText("猜小了!");
            else Rightlb.setText("猜對了!你一共猜了" + guessCount + "次");
        }
    }
}

關鍵觀念

  • 區域變數:方法內宣告,每次呼叫重新建立、銷毀。
  • 成員變數:類別內宣告,隨物件實例存在,跨方法呼叫保持狀態。
  • static 變數:屬於類別,所有實例共享(此處不適合,每局遊戲應獨立計數)。

總結

計數器需宣告為**成員變數**,並在「新遊戲」按鈕歸零、「確定」按鈕遞增。區域變數無法跨事件處理保持狀態。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved