为什么我的开关不起作用?

时间:2013-04-12 17:05:30

标签: java switch-statement

我正在使用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;
}

2 个答案:

答案 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 */

基本上你只是检查你是否在一个特殊的时间间隔,如果没有检查下一个。