1

だから私はカウントダウンする時間関数を作ろうとしています。私がここで見たものに基づいています。変数は別の関数から与えられます。時間がなくなると、変数 finish が 1 になり、関数を終了します。この関数は、機能する場合と機能しない場合があります。たとえば、11 秒の入力を与えると正常に機能しますが、1:00 分を与えると機能しません。誰かがコードの何が問題なのか教えてもらえますか?

if (time1 == 0 && time2 == 0 && time3 == 0 && time4 == 0)
//if all the time is 0 finish the sequence
    finish = 1;

if (time1 != 0) //Checking to see if the first digit is NOT at 0
    time1 = time1 - 1; //  subtract time 1 by 1
else {
    time2 = time2 - 1;  //When time1 is 0
    time1 = 9;
} //Time1 going back to it's original value

if (time2 == 0 && time1 == 0) { //if time1 and time2 are 0s
    if (time3 != 0) { //The minute value (time3)
        time2 = 5;  //60 SECONDS
        time3 = time3 - 1;
        time1 = 9;
    }             
} //Put time 1 to its original value
if (time2 <= 0 && time1 <= 0 && time3 <= 0) {
    if (time4 != 0) { //The minute value (time3)
        time2 = 5; //60 SECONDS
        time3 = 9;
        time4 = time4 - 1;
        time1 = 9; 
    }
} //Put time 1 to its original value

Time4 = 3、Time3 = 2、Time2 = 1、Time1 = 0。これは、時刻が 32:10 分であることを意味します。

4

2 に答える 2

2

問題は、数値をゼロ以外に変更した後にゼロと比較していることです。

1:00 が次のようにエンコードされていると仮定すると、

time1 = 0
time2 = 0
time3 = 1

独自のロジックに従うことができます。

if (time1 != 0) // Nope
    time1 = time1 - 1;
else { // Yes
    time2 = time2 - 1;
    time1 = 9;
}

今、あなたは持っています

time1 == 9
time2 == 0
time3 == 1

if (time2 == 0 && time1 == 0) { // Nope, time1 is 9
    if (time3 != 0) {
        time2 = 5;  
        time3 = time3 - 1;
        time1 = 9;
    }             
}

そして、あなたはまだ持っています

time1 == 9
time2 == 0
time3 == 1

そして最後に

if (time2 <= 0 && time1 <= 0 && time3 <= 0) { // Nope
    if (time4 != 0) { 
        time2 = 5; 
        time3 = 9;
        time4 = time4 - 1;
        time1 = 9; 
    }
}

だからあなたはで終わる

time1 == 9
time2 == 0
time3 == 1

つまり、1:09 です。

時間kを変更したいのは、時間k-1がゼロを「交差」したときだけです。
これは、条件のネストを使用して実行できます。

if (time1 > 0 || time2 > 0 || time3 > 0 || time4 > 0)
{    
    time1 -= 1;
    if (time1 < 0)
    {
        time1 = 9;
        time2 -= 1;
        if (time2 < 0)
        {
            time2 = 5;
            time3 -= 1;
            if (time3 < 0)
            {
                // ...
            }
        }
    }
}
于 2016-04-20T09:00:58.920 に答える