2017-05-21 23 views
0

このように、Javaに関して、さらに多くの問題を解決するコードがありました。なぜ私はそれを書いた最初の方法で動作しませんでした。これは私が書いたオリジナルのコードです。forループ内のifステートメント[JAVA/LibGDX]

private void renderGUIExtraLives (SpriteBatch batch){ 
    float x = GUIcamera.viewportWidth - 50 - Constants.LIVES_START * 50; 
    float y = -15; 
    for (int i = 0; i < Constants.LIVES_START; i++) { 
     if (worldController.lives <= i) { 
      batch.setColor(0.5f, 0.5f, 0.5f, 0.5f); 
      batch.draw(Assets.instance.bunny.head, x + i * 50, y, 50, 50, 120, 100, 0.35f, -0.35f, 0); 
      batch.setColor(1, 1, 1, 1); 
      } 
     } 
    } 

これは動作しませんでした、それはエラーを投げていないが、それは私がしたすべてがそうのようなif文の中括弧削除し、画面に命を描画しませんでした:

private void renderGUIExtraLives (SpriteBatch batch){ 
    float x = GUIcamera.viewportWidth - 50 - Constants.LIVES_START * 50; 
    float y = -15; 
    for (int i = 0; i < Constants.LIVES_START; i++) { 
     if (worldController.lives <= i) 
      batch.setColor(0.5f, 0.5f, 0.5f, 0.5f); 
      batch.draw(Assets.instance.bunny.head, x + i * 50, y, 50, 50, 120, 100, 0.35f, -0.35f, 0); 
      batch.setColor(1, 1, 1, 1); 
     } 
    } 

そして今は魔法のように働いていますが、入れ子のif文から中括弧を削除した後になぜそれがうまくいったのか説明できますか?私は本当にそれだけでなく、誰かがスタック上で同様の質問や回答へのリンクを持っている場合は、このトピックに関する議論があれば読んでいただければ幸いです。

+0

'if(...)'(または 'for(...)'や 'while(...)'の後に中かっこを書かないと、** next文だけ**(あなたの場合 'batch.setColor(0.5f、0.5f、0.5f、0.5f);')は前の構造体の本体を形成します。 Javaでは、字下げには意味がありません(Pythonのような言語とインデントがセマンティクスの一部です)、中括弧を書く必要があるのはなぜですか(構造体が1つの文で構成されていても)。明確にするために[luk2302の答え](http://stackoverflow.com/a/44102153/4216641)を見てください。 – Turing85

答えて

3

あなたのインデントは間違っており、誤解を招きます。 ifの後に中かっこを削除すると、次の文だけが条件付きで実行されます。つまり、コードは基本的に:

for (int i = 0; i < Constants.LIVES_START; i++) { 
    if (worldController.lives <= i) 
     batch.setColor(0.5f, 0.5f, 0.5f, 0.5f); 
    batch.draw(Assets.instance.bunny.head, x + i * 50, y, 50, 50, 120, 100, 0.35f, -0.35f, 0); 
    batch.setColor(1, 1, 1, 1); 
} 

ここで「魔法のように動作する」理由は明らかですが、無条件に描画されます。

+0

ああ!私は、ありがとう! –

関連する問題