Sind die while-Schleifen richtig in for-Schleifen ersetzt worden?

Cloooud

Mitglied
Heey,

wie du oben schon lesen kannst, muss ich die while-Schleifen im Programm in for Schleifen umändern ohne den Programmablauf zu ändern.

Ich habe etwas Schwierigkeiten damit und hoffe, dass mir jemand Tipps geben kann, was ich noch verändern muss

Danke im Voraus!



Was wird getestet? Eingabe Resultat
ReLoop.main(null); 3 Pyramidenhoehe:
**
****
******

ReLoop.main(null); 5 Pyramidenhoehe:
**
****
******
********
**********
Java:
public class ReLoop {
    public static void main(String[] args) {
        int height = Terminal.askInt("Pyramidenhoehe:\n");
        int i = 1;
        while(i <= height) {
            int j = 0;
            while(j < height-i) {
                Terminal.print(" ");
                j++;
            }
            j = 0;
            while(j < i*2) {
                Terminal.print("*");
                j++;
            }
            Terminal.print("\n");
            i++;
        }
    }



Das geänderte Programm:


Java:
public class Reloop
public static void main(String[] args) {
 int height = Terminal.askInt("Pyramidenhoehe:\n");
 for(int i=1;i<=height;i++){
            int j = 0;
            for(int j=0;j<height-1;j++)Terminal.print(" ");
            for(int j=0;j<i*2;j++)Terminal.print("*");
            Terminal.print("\n");
 }}
 
Sieht gut aus. Was passiert denn, wenn du die Programme ausführst? Da wäre so der erste Test, den ich an deiner Stelle machen würde.
 
Sieht gut aus. Was passiert denn, wenn du die Programme ausführst? Da wäre so der erste Test, den ich an deiner Stelle machen würde.
Erstmal Dankeschön!
Wenn ich das ausführe erscheinen mir paar Fehler wegen dem "Terminal" und wegen dem "j" die da stehen.
Also das, weiß aber nicht, wie ich das jetzt beheben oder verändern kann...

Java:
javac /tmp/ET4LSWwGwT/Reloop.java
/tmp/ET4LSWwGwT/Reloop.java:3: error: cannot find symbol
int height = Terminal.askInt("Pyramidenhoehe:\n");
              ^
  symbol:   variable Terminal
  location: class Reloop
/tmp/ET4LSWwGwT/Reloop.java:6: error: variable j is already defined in method main(String[])
            for(int j=0;j<height-1;j++)Terminal.print(" ");
                    ^
/tmp/ET4LSWwGwT/Reloop.java:6: error: cannot find symbol
            for(int j=0;j<height-1;j++)Terminal.print(" ");
                                       ^
  symbol:   variable Terminal
  location: class Reloop
/tmp/ET4LSWwGwT/Reloop.java:7: error: variable j is already defined in method main(String[])
            for(int j=0;j<i*2;j++)Terminal.print("*");
                    ^
/tmp/ET4LSWwGwT/Reloop.java:7: error: cannot find symbol
            for(int j=0;j<i*2;j++)Terminal.print("*");
                                  ^
  symbol:   variable Terminal
location: class Reloop
/tmp/ET4LSWwGwT/Reloop.java:8: error: cannot find symbol
            Terminal.print("\n");
            ^
 
Das wird aber dann doch im anderen Programm auch schon der Fall gewesen sein, oder?

Beim Anpassen von Legacy Code (So schimpft man Code manchmal, den man anpassen muss weil er neuen Gegebenheiten nicht entspricht) ist der erste Schritt immer, dass man sicher stellt, dass sich dieser wie gewohnt übersetzen lässt.

Bezüglich des Fehlers: Vermutlich verwendet Ihr irgend eine Terminal Klasse in euren Übungen. Diese musst Du natürlich auch einbinden. Also ggf. fehlt nur eine import Anweisung oder ihr kopiert die Klasse immer so dazu oder oder oder ....
 
Der Zweite Fehler besagt, dass Du ja schon eine lokale Variable j hast. (int j = 0;), daher kannst Du keine zweite lokale Variable j nennen.

Hier solltest Du also schlicht diese eine Zeile raus löschen, damit du nur noch die lokale Variable j mit Gültigkeitsbereich der jeweiligen for Schleife hast.
 
Ja das stimmt, war auch da schon ein "Problem", also ich habe jetzt nicht genau verstanden, wie ich das zu ersetzen habe... und mit löschen der Zeile meinst du die Zeile "int j = 0"?
Der Zweite Fehler besagt, dass Du ja schon eine lokale Variable j hast. (int j = 0;), daher kannst Du keine zweite lokale Variable j nennen.

Hier solltest Du also schlicht diese eine Zeile raus löschen, damit du nur noch die lokale Variable j mit Gültigkeitsbereich der jeweiligen for Schleife hast.
 
Java:
public class Terminal {
public static void main(String[] args) {
 int height = Terminal.askInt("Pyramidenhoehe:\n");
 for(int i=1;i<=height;i++){
            
            for(int j=0;j<height-1;j++)System.out.print(" ");
            for(int j=0;j<i*2;j++)System.out.print("*");
            System.out.print("\n");
 }}}

Ah okay Danke und das "Terminal.askInt" muss ich leider auch noch umändern, bei den anderen habe ich "System.out.print" geschrieben, aber da hier nach etwas gefragt wird bin ich mir gerade nicht sicher was ich hier hinschreiben soll
 
Also da wäre meine Vermutung, dass ihr da irgendwas an die Hand gegeben bekommen habt, das ihr verwenden sollt.

Ansonsten nutze einfach erst einmal folgende Klasse für Dein aktuelles Projekt:
Java:
import java.util.Scanner;

public class Terminal {
    private static Scanner scanner = new Scanner(System.in);
    
    public static int askInt(String msg) {
        System.out.println(msg);
        return scanner.nextInt();
    }
}

(Jetzt so aus dem Kopf geschrieben, aber als erstes Minimum sollte es erst einmal funktionieren.)
 

Zurück
Oben