2015-10-14 120 views
3

對於此代碼按預期運行使用您的cmd /終端不是IDE。 (或者你不會看到\ r的正確效果)Java printf併發症

當終端中的9到達4個空格後的最右邊位置時,它將轉向並且向後移動4個空格並且繼續。但是,當它在完整循環後到達起始點時,第二個空間上的剩餘9個不會被\ r清除。什麼可能導致這個?

public class Core { 
    public static void main(String[] args) throws InterruptedException { 

     int Array[][] = new int[4][6]; 
     int score; 
     boolean enemy = true; 
     boolean dir = true; 

     // EnemyLine 
     while (enemy) { 
      for (int i = 1;;) { 
       Thread.sleep(1000); 

       if (i == 1) 
        dir = true; 
       else if (i == 4) 
        dir = false; 
       if (dir == true) { 
        int a = Array[0][i] = 9; 
        System.out.printf("%" + i + "d", a); 
        i++; 
        System.out.print("\r"); 
        continue; 
       } else if (dir == false) { 
        int a = Array[0][i] = 9; 
        System.out.printf("%" + i + "d", a); 
        i--; 
        System.out.print("    \r"); 
        continue; 
       } 
      } 
     } 

    } 
} 
+1

我在這裏沒有看到問題或問題(除了家庭作業問題)。在調試器/ IDE中運行它,並觀察所有變量和輸出窗口,以確定發生了什麼。或者,只需在紙面上(或在您的腦海中,它不是太複雜)穿過它。 – KevinDTimm

+0

那麼問題是,在返回的腿\ r不清楚每9個。我無法找到是什麼原因導致這也是我在eclipse中寫入,並找不到錯誤。 (代碼在eclipse中並沒有像預期的那樣起作用,因爲它跳轉了一行,但是在終端中所有的輸出都發生在一行上) – heathbm

+1

你的代碼中幾條無關的註釋: 你有'if(dir == true) {...} else if(dir == false){...}'因爲_dir_是一個布爾值,所以它只能是真或假,所以你的if..else可以是'if(dir == true){。 ..} else/* dir必須是false */{...}' 另外,不要測試'some_boolean == true'是否測試'some_boolean':'if(dir){...} else { ...} 這很混亂,因爲「dir」(方向?)沒有告訴你很多:'dir == true'是什麼意思?如果它意味着「向右移動」,虛假意味着「向左移動」,則將「dir」重命名爲「movingRight」......如果(movingRight){...} else {/ * left left * /}' –

回答

3

解釋爲什麼你在你的循環得到這樣的結果

基本上你是改變在哪裏放置回車\ r。

當你回到i = 1時,循環完成之後。你正在改變多少個字符後你要做回車。

1 -> _9\r 
2 -> __9\r 
3 -> ___9\r 
4 -> ____9  \r 
x3 -> ___9  \r 
x2 -> __9  \r 
x1 -> _9\r 

因此最後一條語句不清除9日在X2如果(DIR ==真)需要

變化

System.out.print(" \r"); // enter a space before \r 

或者這將是最好使用

System.out.print("    \r"); // preferable 

您還可以從條件循環中刪除您的sysout \ r並在線程休眠前使用它

System.out.print("  \r"); 
Thread.sleep(1000); 
+0

感謝您的反饋,我現在使用第二種方法,現在我明白我最初出錯的地方。非常感激。 – heathbm