Java 递增数字

Java 递增数字,java,swing,timer,mouselistener,Java,Swing,Timer,Mouselistener,我有一个变量值,它跟踪数字是奇数还是偶数 I初始化aint值=0 变量“value”现在为0,点击2次后,系统打印“偶数”,1秒后变量“value”递增1 变量“value”现在是1,它是奇数,所以它将输出“odd”,一秒钟后,变量值将增加1 变量“value”现在是2,它是偶数,因此它将再次允许用户在JFrame上单击2次。单击2次后,系统将打印“偶数”,1秒后,将显示 变量“value”将增加1 变量“value”现在是3,它是奇数,所以它会打印出来,“odd”,一秒钟后,变量值会增加1 等

我有一个变量值,它跟踪数字是奇数还是偶数

  • I初始化a
    int值=0

  • 变量“value”现在为0,点击2次后,系统打印“偶数”,1秒后变量“value”递增1

  • 变量“value”现在是1,它是奇数,所以它将输出“odd”,一秒钟后,变量值将增加1

  • 变量“value”现在是2,它是偶数,因此它将再次允许用户在JFrame上单击2次。单击2次后,系统将打印“偶数”,1秒后,将显示 变量“value”将增加1

  • 变量“value”现在是3,它是奇数,所以它会打印出来,“odd”,一秒钟后,变量值会增加1

    等等

  • 这一直持续到我关闭程序


    我把“值”放在我的计时器内,并使其递增,但是“值”在倒计时后不会递增。为什么它不是递增的?请帮忙

    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;
    import javax.swing.Timer;
    
    @SuppressWarnings("serial") 
    public class OnClickLesson extends JFrame   {
    
        private int value = 0, clicked = 0, countdown = 1;
        private Timer timer = new Timer(1000, null);
        public OnClickLesson() {
            timer = new Timer(1000, new countDownTimer());  
    
            addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {        
                    if(value%2 == 0) {
                        clicked++;
                        if(clicked == 2) {
                            System.out.println("even");
                            timer.start();      
                        }
                    }
                }
            });
    
            if(value%2 == 1) {
                System.out.println("odd");
                timer.start();          
            }
    
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            pack();
            setSize(400,600);
            setLocationRelativeTo(null);
            setVisible(true);
        }
    
        private class countDownTimer implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent e) {
    
                if (countdown == 0) {
                    timer.stop();   
                    countdown = 1;
                    value++;
                }           
    
                else {
                    System.out.println("Countdown " + countdown--);
                }
            }
        }
    
        public static void main(String[] args) {    
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new OnClickLesson();
                }
            });
        }
    }
    

    我认为您的代码中有一个小的逻辑错误

    如果你看一下这个部分

    addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent e) {        
            if(value%2 == 0) {
                clicked++;
                if(clicked == 2) {
                    System.out.println("even");
                    timer.start();      
                }
            }
        }
    });
    
    if(value%2 == 1) {
        System.out.println("odd");
        timer.start();          
    }
    
    我相信
    if(值%2==1){…
    语句应该在
    mousePressed
    方法中

    addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent e) {        
            if(value%2 == 0) {
                clicked++;
                if(clicked == 2) {
                    System.out.println("even");
                    timer.start();      
                }
            } else if(value%2 == 1) {
                System.out.println("odd");
                timer.start();          
            }
        }
    });
    
    这样,当调用
    mousePressed
    时,它可以同等地计算这两种状态

    此外,我认为您可能应该重置单击的

    clicked++;
    if(clicked == 2) {
        System.out.println("even");
        timer.start();      
        clicked = 0;
    }
    

    否则您将无法再次触发
    “偶数”
    部分…

    从我的测试中,当我双击帧时,计时器启动,它倒计时并递增
    ,并将
    倒计时
    设置为
    1
    。此时无法重新启动计时器,因为该值现在是奇数。。。