0

を使ってクロノメーター(10秒)を作っていSystem.currentTimemillisます。そして、1 秒あたり 10 回更新されるメソッドに、次のコードがあります。

Start は、onCreate メソッドで「尋ねられる」アクティビティの開始時刻です。Integer.parseInt(Long.toString(y))私がそれを行うSystem.out.println(Integer.parseInt(Long.toString(y)));と、時間が正しく返されるので、それが機能することはわかっています。

だから、私の問題は、スイッチが正しく機能しない理由がわからないことです。

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;
}
4

2 に答える 2

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

}
...

...

于 2013-04-12T17:07:28.657 に答える
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 */

基本的に、次のインターバルをチェックしない場合は、特別なインターバルにいるかどうかをチェックするだけです。

于 2013-04-12T17:11:22.890 に答える