2017-06-26 128 views
1
private static final String TAG = MainMenu.class.getSimpleName(); 
    Log.d(TAG, "begin loop"); 
    for (int fa = 0; fa < 2000; ++fa) { 
     Log.d(TAG, "starting loop " + String.valueOf(fa)); 
     for (int fb = 0; fb < 8; ++fb) { 
      Log.d(TAG, "fb = " + String.valueOf(fb)); 
     } 
    } 

我知道這是一個非常簡單的嵌套循環。我得到了一些棘手的事情,對我而言,我看不出爲什麼。我試圖用while循環重寫它,但同樣的事情發生了。Android Studio for loop問題

這裏是正在發生的扭曲事情的例子:

D: starting loop 53 
    D: fb = 0 
    D: fb = 1 
    D: fb = 2 
    D: fb = 3 
    D: fb = 4 
    D: fb = 5 
    D: fb = 6 
    D: starting loop 54 
    D: fb = 0 
    D: fb = 2 
    D: fb = 3 
    D: fb = 4 
    D: fb = 6 
    D: starting loop 55 
    D: fb = 0 
    D: fb = 1 
    D: fb = 3 
    D: fb = 4 
    D: fb = 6 
    D: starting loop 56 
    D: fb = 0 
    D: fb = 1 
    D: fb = 3 
    D: fb = 4 
    D: fb = 6 
    D: fb = 7 
    D: fb = 0 
    D: fb = 1 
    D: fb = 3 
    D: fb = 4 
    D: fb = 6 
    D: fb = 7 

我把第一個日誌聲明,這樣我就知道,如果它被另一個線程跑了,不知怎麼讓指針復位,但在日誌中只有一個「開始循環」。

你可以在循環53中看到,它甚至沒有將它設置爲7,在循環54和55中它跳過數字,在56中重新開始。

這是行未記錄問題還是循環問題?

我嘗試註釋掉內登錄,我得到的輸出是這樣的:

D: starting loop 1642 
    D: starting loop 1643 
    D: starting loop 1645 
    D: starting loop 1646 
    D: starting loop 1647 
    D: starting loop 1649 
    D: starting loop 1650 
    D: starting loop 1652 

你可以看到它是跳躍的數字。我希望這只是一個日誌記錄問題,for循環沒有什麼大問題。

任何人都可以給任何幫助非常感謝。提前致謝。

+3

聽起來像異步日誌。你沒有提到你使用的日誌。如果用'System.out.println'替換日誌會發生什麼? –

+1

無關:fa/fb是**非常罕見的循環計數器名稱。改用i,j,k ...。並做我++;不是++ i。這也是非常罕見的。事情:你不想用這些東西讓你的讀者感到驚訝。當您偏離常規做法時,會使您的代碼閱讀困難10倍。 – GhostCat

+0

我把它變成了一個奇怪的變量。顯而易見的是,這些變量沒有被用在別的地方。我知道如果我在循環開始聲明變量,那麼它是本地的,但我想讓它變得明顯。 – Will

回答

2


您的代碼應該可以正常工作,但它不會。你爲什麼問?我不認爲它與你的代碼有關,但更多地與控制檯IO有關。你在幾秒(毫秒)內寫入18001行,這可能會出錯:D
嘗試在迭代中添加一些睡眠,或只是少打印
快樂編碼!

+0

只是使用'System.out.println()'而不是'Log.d()' –

+0

這就是我所希望的。然後,我會在每個內循環結束時進行睡眠測試。 – Will

+0

system.out.println()給出同樣的問題。試圖把睡眠放在內部循環現在 – Will