Input/Output Codezeile erklären

cybermailer

Mitglied
Bräuchte eine Erlärung zu folgender While Schleife:

PHP:
public class K4A5 {
	public static void main(String[] arg) {
		Out.print("Geben Sie eine positive ganze Zahl ein (Ende = Strg-C): ");
		int x = In.readInt();
		
		while (In.done()) {
			Out.print('{');
			int pos = 0;
			boolean first = true;
			while (x > 0) {
				if (x % 2 == 1) {
					if (first) first = false; else Out.print(',');
					Out.print(pos);
				}
				x = x / 2; 
				pos = pos + 1;
			}
			Out.println('}');
			Out.println();
			Out.print("Geben Sie eine positive ganze Zahl ein (Ende = Strg-C): ");
			x = In.readInt();
		}
	}
}

Eine mögliche Lösung bei Eingabe der Zahl 44 sieht so aus {2,3,5}

Meine Lösung sieht so aus: {2,3,5,}

Und genau das ist mein Problem der Beistrich.

Dieser wird mittels diesen Code gelöst:

PHP:
if (first) first = false; else Out.print(',');
Wobei am Anfang boolean = true gesetzt wird...

hmm ich check jetzt gerade nicht was da passiert...
kann mir das jemand (für Anfänger) erklären?

Danke!!

PS.: Dieser Code rechnet sich die Binärdarstellung einer Zahl aus.

Bei 44:

x x/2 Rest Pos
44 22 0 0
22 11 0 1
11 5 1 2
5 2 1 3
2 1 0 4
1 0 1 5

Binär: 101100 = 2^2 + 2^3+2^5

= Lösung 2,3,5
 
Zuletzt bearbeitet von einem Moderator:
Vielleicht helfen dir die Kommentare ja weiter.
PHP:
public class K4A5 { 
    public static void main(String[] arg) { 
        Out.print("Geben Sie eine positive ganze Zahl ein (Ende = Strg-C): "); 
        int x = In.readInt(); 
         
        while (In.done()) { 
            Out.print('{'); 
            int pos = 0;
            boolean first = true; //Initialisiert die Variable "first" mit "true";
            while (x > 0) { 
                if (x % 2 == 1) {
                    if (first == true)
                    {
                         //Da dies die erste Zahl ist (first == true) wird kein "," ausgegeben
                         //Damit die nächste Zahl ein Komma bekommt setzen wir die
                         //Variable "first" auf "false"
                         first = false;
                    }
                    else
                    {
                         //Nun ist "first == false" womit der Die "else-Anweisung" durchgangen wird
                         //und ein "," gesetzt wird.
                         Out.print(',');
                    }
                    Out.print(pos); 
                } 
                x = x / 2;  
                pos = pos + 1; 
            } 
            Out.println('}'); 
            Out.println(); 
            Out.print("Geben Sie eine positive ganze Zahl ein (Ende = Strg-C): "); 
            x = In.readInt(); 
        } 
    } 
}
 
beim ersten keinen beistrich machen... das macht es

also erstes = true
1. Zahl: erstes ist true, erstes wird false;
2. Zahl: erstes ist false, beistrich wird gemacht
3. zahl: erstes ist false, beistrich wird gemacht
..
 
vor 1. Stelle? verzichen -> _
1. Stelle ausgeben -> 2
vor 2. Stelle? Komma -> ,
2. Stelle ausgeben -> 3
vor 3. Stelle? Komma -> ,
3. Stelle ausgeben -> 5

-> _ 2, 3, 5
 

Zurück
Oben