我每隔一小时开始运行一次代码,但不执行以下行
int lastcyclehour=hour;
我无法解决为什么会这样。我得到的错误是“局部变量lastcyclehour的值是 没用过“代码:
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
public class ControlStarter {
public static void main(String[] args) {
//TIMER, runs the code immediately once in the beginning of each hour
int lastcyclehour=0;
Timer timer = new Timer();
TimerTask tt = new TimerTask(){
public void run(){
Calendar cal = Calendar.getInstance(); //read Calendar
int hour = cal.get(Calendar.HOUR_OF_DAY);//get the hour
if(!(hour==lastcyclehour)) {
//code
System.out.println(hour);
System.out.println(lastcyclehour);
//code
}
int lastcyclehour=hour;
}
};
timer.schedule(tt, 1000, 1000*2);//
}
}
答案 0 :(得分:0)
您正在声明两个同名变量。用线
int lastcyclehour=0;
您声明了main
方法的局部变量,该变量永远不会更改。请注意,当您想从内部类访问它时,甚至禁止更改它。
声明
if(!(hour==lastcyclehour)) {
您将该常数与hour
进行比较。
使用
行int lastcyclehour=hour;
您在内部类的lastcyclehour
方法中声明了另一个名为run
的变量,这是您从未使用过的,因此它没有任何效果。要为现有变量赋值,不得声明它,即不指定类型,只需写lastcyclehour=hour;
即可。但如上所述,您无法从内部类修改周围方法的局部变量。要创建一个可变变量来记住它在run()
方法的不同调用之间的值,你必须将它声明为内部类的实例变量:
public static void main(String[] args) {
//TIMER, runs the code immediately once in the beginning of each hour
Timer timer = new Timer();
TimerTask tt = new TimerTask() {
int lastcyclehour = 0;
public void run() {
Calendar cal = Calendar.getInstance(); //read Calendar
int hour = cal.get(Calendar.HOUR_OF_DAY);//get the hour
if(hour!=lastcyclehour) {
//code
System.out.println(hour);
System.out.println(lastcyclehour);
//code
lastcyclehour=hour;
}
}
};
timer.schedule(tt, 1000, 1000*2);//
}
进一步注意,赋值lastcyclehour=hour
必须位于if
语句的条件代码中,以确保将当前小时与执行操作的最后一小时进行比较。
此外,条件! (a == b)
可以简化为a != b
。