2017-05-21 2 views
0

So bekam ich meinen Code zu arbeiten, diese Frage mehr in Bezug auf Java und warum es so funktionierte, wie ich es VS bekam. Warum hat es nicht die erste Art funktioniert, wie ich es geschrieben habe. Dies ist der ursprüngliche Code, den ich geschrieben habe.Verschachtelte if-Anweisung innerhalb von for-Schleife [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); 
      } 
     } 
    } 

Das hat nicht funktioniert, es keine Fehler warf, aber es hat nicht das Leben auf dem Bildschirm zu zeichnen, alles, was ich war die geschweiften Klammern der if-Anweisung entfernen tat wie so:

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

Und jetzt magisch es funktioniert, können einige erklären, warum es funktionierte, nachdem ich die geschweiften Klammern aus der verschachtelten if-Anweisung entfernt habe? Ich würde es sehr schätzen, sowie jede Diskussion zu diesem Thema wäre toll zu lesen, wenn jemand einen Link zu einer ähnlichen Frage oder Antwort hier auf Stack hat.

+0

Wenn Sie die geschweiften Klammern nicht nach einem 'if (...)' (oder einem 'für (...)' oder einem 'while (...)') schreiben, nur die ** next-Anweisung ** (in Ihrem Fall 'batch.setColor (0.5f, 0.5f, 0.5f, 0.5f);') bildet den Körper des vorhergehenden Konstrukts. In Java hat Einrückung keinen semantischen Effekt (es gibt Sprachen - wie Python - wo die Einrückung Teil der Semants ist) und warum sollten Sie immer die geschweiften Klammern schreiben (auch wenn der Rumpf des Konstrukts nur aus einer Anweisung besteht). Sehen Sie sich die [Antwort von luk2302] (http://stackoverflow.com/a/44102153/4216641) an. – Turing85

Antwort

3

Ihr Einzug ist falsch und irreführend. Wenn Sie die Klammern nach dem if entfernen, wird nur die nächste Anweisung bedingt ausgeführt. Das bedeutet, der Code ist im Grunde:

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

Sollte klar sein, warum es "magisch funktioniert" jetzt, es zeichnet nur bedingungslos.

+0

Ah! Ich verstehe, danke! –

Verwandte Themen