我正在使用System.currentTimemillis
制作计时器(10秒钟)。我有一个方法,每秒刷新10次以下代码:
Start是活动的开始时间,它在onCreate方法中被“询问”。
我知道Integer.parseInt(Long.toString(y))
有效,因为当我执行System.out.println(Integer.parseInt(Long.toString(y)));
时,它会正确地返回我的时间。
所以,我的问题是我不知道为什么swich不能正常工作。
long y=System.currentTimeMillis()-start;
switch (Integer.parseInt(Long.toString(y))) {
case 1000:
time.setText("3");
time.setAnimation(anim);
break;
case 2000:
time.setText("2");
time.setAnimation(anim);
break;
case 3000:
time.setText("1");
time.setAnimation(anim);
break;
case 4000:
time.setText("GOOO!");
time.setAnimation(anim);
count.setVisibility(View.VISIBLE);
cuenta = 0;
count.setText("0");
break;
case 5000:
time.setText("1");
time.setAnimation(anim);
break;
case 6000:
time.setText("2");
time.setAnimation(anim);
break;
case 7000:
time.setText("3");
time.setAnimation(anim);
break;
case 8000:
time.setText("4");
time.setAnimation(anim);
break;
case 9000:
time.setText("5");
time.setAnimation(anim);
break;
case 10000:
time.setText("Time!");
time.setAnimation(anim);
count.setVisibility(View.INVISIBLE);
break;
}
答案 0 :(得分:8)
因为它不能准确地给出这些数字1000,2000,3000 ......
如果数字或多或少,则案例将失败
修改强>
试试这个
public static boolean isBetween(int x, int lower, int upper) {
return lower <= x && x <= upper;
}
if (isBetween(num, 0, 1000)) {
// do something
} else if (isBetween(num, 1001, 2000)) {
// do domething
}
...
...
答案 1 :(得分:2)
您的代码存在的问题是您需要检查特殊时间。我想你可能想要使用这样的代码:
Integer val = Integer.parseInt(Long.toString(y));
if(val<1000) {
time.setText("3");
time.setAnimation(anim);
} else if(val<2000) {
time.setText("2");
time.setAnimation(anim);
} else if(val<3000) {
time.setText("1");
time.setAnimation(anim);
} else if(val<4000) {
time.setText("GOOO!");
time.setAnimation(anim);
count.setVisibility(View.VISIBLE);
cuenta = 0;
count.setText("0");
} else /* and so on */
基本上你只是检查你是否在一个特殊的时间间隔,如果没有检查下一个。