2017-12-08 2 views
1

Ich versuche, ein bestimmtes Bild nur für die erste Iteration einer for-Schleife durch einen Schalter festzulegen. Für case 'f' möchte ich ein anderes Bild auf der ersten Iteration hinzufügen.Erstellen einer If-Anweisung für die erste Runde von Switch Java

Wie würde ich das tun? Ist es überhaupt möglich, den Überblick innerhalb eines Schalters zu behalten?

for (char c : symbols) { 
      switch (c) { 
      case 'X': 
       g2.setColor(Color.BLACK); 
       g2.drawImage(wallImg, x, y, width, height, null); 
       break; 
      case 's': 
       g2.setColor(Color.GREEN); 
       g2.drawImage(snakeImg, x, y, width, height, null); 
       break; 
      case 'f': 
       g2.setColor(Color.ORANGE); 
       g2.drawImage(burgerImg, x, y, width, height, null); 
       break; 
      case '.': 
       g2.setColor(Color.WHITE); 
       g2.fillRect(x, y, width, height); 
       break; 
      case '\n': 
       y += height; 
      } 
+0

ein boolesches Flag hinzufügen, bevor der Schalter dann tue ein if (boolean flag), um zu sehen, ob es wahr/falsch ist, dann gehst du ins else, wenn es wahr ist, damit du ein anderes Bild laden kannst. – Artemis

+0

Die Iterationszählung sollte überhaupt nicht Teil des Malprozesses sein, da Sie nicht kontrollieren können, wie, ob oder wann das Malen stattfindet. Die Änderung des Objektstatus sollte in Ihrer Spielschleife sein (wahrscheinlich ein Swing-Timer). Die Malmethode sollte nur den Zustand des Modells wiedergeben, aber nicht ändern. –

+0

Hat dies Ihr Problem gelöst? @ User5402 Sie haben es nicht als Lösung markiert - welches Problem haben Sie daraus erhalten? – Artemis

Antwort

1

ein Flag hinzufügen, um zu sehen, ob Sie noch iteriert haben oder nicht, dann eine if-Anweisung in Ihrem Switch-Fall übernehmen für sie wie folgt zu erklären:

 boolean flag = false;  

     for (char c : symbols) { 
      switch (c) { 
      case 'X': 
       g2.setColor(Color.BLACK); 
       g2.drawImage(wallImg, x, y, width, height, null); 
       break; 
      case 's': 
       g2.setColor(Color.GREEN); 
       g2.drawImage(snakeImg, x, y, width, height, null); 
       break; 
      case 'f': 
       //check to see if your flag is true/false 
       if(flag){ 
        g2.setColor(Color.ORANGE); 
        g2.drawImage(burgerImg, x, y, width, height, null); 
       }else{ 
        //set first image 
        flag = true; 
       } 
       break; 
      case '.': 
       g2.setColor(Color.WHITE); 
       g2.fillRect(x, y, width, height); 
       break; 
      case '\n': 
       y += height; 
       break; 
     } 
+0

Würde die Flagge nicht immer falsch sein, obwohl @Artemis? – user5402

+0

@ user5402 nein, weil Sie 'flag = true' in der else-Anweisung setzen und nie wieder auf false setzen – Artemis

+0

Warum verwenden Sie' Boolean flag' (Großbuchstabe ** B **) und nicht 'boolean flag' (Kleinbuchstabe ** b **)? –

Verwandte Themen