我有一个变量值,用于跟踪数字是奇数还是偶数。
我初个化了int value = 0;
变量“value”现在为0,点击2次后,系统将打印出“even”,一秒钟后,变量“value”将增加1;
变量“value”现在为1,它是奇数,因此它将打印出来,“奇数”,一秒后,变量值将增加1;
变量“value”现在为2,它是偶数,因此它将再次允许用户点击JFrame 2次。点击2次后,系统将打印出“均匀”,一秒后打印出来 变量“value”将增加1;
变量“value”现在为3,它是奇数,因此它将打印出来,“奇数”,一秒后,变量值将增加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();
}
});
}
}
答案 0 :(得分:3)
我认为你的代码中出现了一个小的逻辑错误......
如果你看看这一节......
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(value%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
值
clicked++;
if(clicked == 2) {
System.out.println("even");
timer.start();
clicked = 0;
}
否则您将永远无法再次触发"even"
部分......