亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用Lambda表達式計算按鈕點擊次數?

如何使用Lambda表達式計算按鈕點擊次數?

慕的地6264312 2021-05-06 14:15:50
在我的代碼的這一部分中,我想計算用戶按下按鈕的次數。問題是,如果我聲明該數字以計算該函數外部的點擊次數,那么它根本不會執行。這是我的意思:byte numButtonClicks = 0;    tellingIntroButton.addActionListener(e -> {        numButtonClicks ++;        System.out.println(numButtonClicks);    });在內部聲明它也不是一個選擇,因為它將始終被重置。謝謝你的幫助!
查看完整描述

2 回答

?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

如果你有類似的東西


public class YourComponent extends JFrame { // or whatever it is you're extending


    // ....


    public void init() {

        // ...

        byte numButtonClicks = 0;


        tellingIntroButton.addActionListener(e -> {

            numButtonClicks ++;

            System.out.println(numButtonClicks);

        });

    }


    // ...

}

您會遇到一些問題。


匿名內部類(例如您的動作偵聽器)中使用的變量必須隱式為final。您在對另一個答案的評論中提到的例外,


Exception in thread "main" java.lang.Error: Unresolved compilation problem: Local variable numButtonClicks defined in an enclosing scope must be final or effectively final

告訴您計數器變量不是最終變量


您正在使用一個byte字段作為計數器。為什么不選擇aint或a long?


您不能聲明finalint或long方法內部并對其進行遞增。


您可以通過在班級中擁有一個成員來解決此問題,例如


public class YourComponent extends JFrame { // or whatever it is you're extending


    // ....


    private int numButtonClicks = 0;


    public void init() {

        // ...


        tellingIntroButton.addActionListener(e -> {

            YourComponent.this.numButtonClicks++;

            System.out.println(numButtonClicks);

        });

    }


    // ...

}

或者,就像其他答案所暗示的那樣,如果并發在這里對您來說是一個問題(如果可以通過不同的線程修改計數),則可以使用java8對象,例如LongAdder。如果您使用此路線(LongAdder),則在方法范圍內聲明它時,必須將其聲明為final。


查看完整回答
反對 回復 2021-05-19
?
米脂

TA貢獻1836條經驗 獲得超3個贊

您能讓我知道您得到的確切錯誤是什么。如果numButtonClicks是局部變量,則無法在lambda函數中對捕獲的局部變量進行突變。使它成為一個LongAdder類變量,該變量是原子的并為并發而設計。


  LongAdder numButtonClicks= new LongAdder();


              tellingIntroButton.addActionListener(e -> {

                    numButtonClicks.increment();

                    System.out.println(numButtonClicks);

                }); 


查看完整回答
反對 回復 2021-05-19
  • 2 回答
  • 0 關注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號