Java Noobfrage Part II

R

r_

Gast
Hey Leute,

mache grad ein paar Übungsaufgaben um in die Basics von Java reinzukommen und kann mir bei folgendem Code die Ausgabe nicht wirklich erklären:

Code:
	int boundary;
	boundary = 1000;
	
        int sum;
	sum = 0;
	
        int counter;
	counter = 7;
	
        int ausgabe;
	ausgabe = 0;
	
	while (ausgabe < boundary) { 
		ausgabe = sum + counter;
		System.out.println(ausgabe);
		counter = counter + 7;
	}

Sprich er gibt die Vielfachen von 7 aus... klappt soweit auch gut, aber er gibt auch noch 1001 aus, obwohl boundary ja 1000 ist.

Wieso ist das so? Zerbreche mir da schon seit 10 Min den Kopf.....

Gruß,
 
mist
 
Schau dir mal die Reihenfolge in der Schleife an

1. ausgabe = sum + counter;
2. System.out.println(ausgabe);

Erst wird die Variable Ausgabe sum + counter erhöht und dann ausgegeben.
Der Check erfolgt erst danach, und es wird geprüft ob ausgabe kleiner als boundaryist.

Sprich, wenn ausgabe 999 ist dann hüpft der rein rechnet und am ende kommt ein Wert größer boundaryraus.

mfg
 
naja, x * 7 = 1001

Und der check halt bevor er wieder in die schleife geht obs noch < 1000 ist, er stellt dann fest dass es 1001 sind und geht nicht mehr in die schleife.

also vollkommen in ordnung
 
nunja die zahl vor 1001 wäre die 994, diese ist noch < 1000, also wird der code ausgeführt und es kommt 1001 raus, damit das nicht ausgegeben wird, gäbe es zwei möglichenkeiten: entweder müsstest du vor der ausgabe noch einmal prüfen ob die zahl <1000 ist oder du prüfst ob der counter noch <1000 ist und falls es >1000 ist wird das prgramm beendet.
 
Zuletzt bearbeitet:
Ah, ja, macht Sinn. Danke Leute.

Würdet ihr es als korrekt betrachten, diesen Check noch extra einzubauen?

Der Logik nach gehört 1001 ja eigentlich nicht mehr dazu - auch wenn er mit 994 "korrekterweise" die Schleife nochmal durchläuft, oder? ^^
 
hm merke grad, dass das einfachste wohl wäre zu schreiben

PHP:
while ( counter < boundary ){
      ...
}

dadurch sollte die letzte ausgabe die 994 sein.
 
Dann geht das aber nur mit Multiplizieren statt addieren ^^

Hab das jetzt so gelöst:

Code:
	int n;
	n = 7;
	
	int boundary;
	boundary = 1000;

	int sum;
	sum = 0;
	
	int counter;
	counter = n;

	int ausgabe;
	ausgabe = 0;
	
	while (ausgabe < (boundary - n)) { 
		ausgabe = sum + counter;
		counter = counter + 7;
		}
	System.out.println(ausgabe);

Die Frage ist halt, ob das - n immer korrekt ist. Mir fällt aber grad kein Fall ein, bei dem das nicht so wäre.

Passt das so? ^^
 
Jau, ist wohl die korrekte Lösung. Zumal mein Code oben falsch ist... müsste heissen boundary - n + 1.
Da ist aber dann die Frage... was ist, wenn n 2 oder 1 ist? ^^

Ist also eher patchwork, da ist deine Methode sauberer!

Mersi

/edit: Geht auch für 1 und 2, also ist auch okay. Aber nicht so sauber ^^
 
Zuletzt bearbeitet:
Warum so kompliziert? :freaky:

Code:
int n = 7;
int boundary = 1000;
int ausgabe = 0;
do {
  ausgabe += n;
  System.out.println(ausgabe);
} while (ausgabe < boundary - n);

Edit: } while (ausgabe < boundary - n); weil 1001 nicht erwünscht ..
 
Zuletzt bearbeitet:
Also wenn du einfach nur alle Vielfache von 7 unter einer bestimmten Grenze ausgeben willst:
Code:
final int boundary = 1000;

for (int i = 7; i < boundary; i += 7) {
	System.out.println(i);
}
 
Zuletzt bearbeitet:
@lynxx

tja mit ausgangsbedidung hab ich auch schon überlegt, so tritt aber wieder das ursprüngliche problem auf, dass die letzte ausgabe 1001 ist ...

@0-8-15 User

das geht natürlich so, aber er will ja erstma die basics lernen, wie er selber schreibt^^
 
Zuletzt bearbeitet:
zockafreak :D schrieb:
@lynxx

tja mit ausgangsbedidung hab ich auch schon überlegt, so tritt aber wieder das ursprüngliche problem auf, dass die letzte ausgabe 1001 ist ...
Huchm nicht gesehen das dass nicht erwünscht ist, na gut dann:
} while (ausgabe < boundary - n);
Es war vorher nur schlecht lesbar (Im Code :p) was das ganze überhaupt soll.
 
Jep, ein += ist mir im Buch noch nicht untergekommen :D Was macht/heisst das denn genau, wenn das jetzt schon vorgeschlagen wurde? :o

Wäre natürlich die eleganteste Lösung ^^
 
x += y ist äquivalent zu x = x+y.
Ist einfach nur eine andere, verkürzte Schreibweise.
 
@ralle_h: Die Variable sum hat in deinem Beispiel immer den Wert 0.

Code:
// Obergrenze
int boundary = 1000;
// Schrittweite
int step = 7;
// Speicher für die Zwischenergebnisse
int result = 0;
						
// Solange result mehr als einen Schritt weit von der Grenze entfernt ist
while (result < boundary - step) {
	// Neues Zwischenergebnis berechnen
	result = result + step;
	// Zwischenergebnis ausgeben
	System.out.println(result);
}

Hilfreich: http://openbook.galileocomputing.de/javainsel/ (kennst du wahrscheinlich schon).
 
Wie wäre es, das println und die Rechnung in der Reihenfolge zu tauschen? Also erst ausgeben und dann rechnen. Solange der Inhalt der Variable mit dem Ergebnis der Rechnung im späteren Programmverlauf keine Probleme macht, ist das ein legitimer Weg. Die Variable wird nämlich dann 1001 enthalten.
Und das mit dem 'boundary' bzw. 'step' hätte sich dann auch erledigt.
 
Alles klar.

Noch ne Frage:

Code:
	for (boolA == false){
		boolB = false;
		boolAusgabe = boolA && boolB;
		System.out.println(boolA + " && " + boolB + " liefert " + boolAusgabe);
		boolAusgabe = boolA || boolB;
		System.out.println(boolA + " || " + boolB + " liefert " + boolAusgabe);
		boolAusgabe = boolA ^ boolB;
		System.out.println(boolA + " ^ " + boolB + " liefert " + boolAusgabe);
	}

Was passt ihm an diesem Teil der Schleife nicht?

Compiler meint in der ersten Zeile fehlt ihm ein ";"???

Danke schonmal!
 

Ähnliche Themen

Antworten
19
Aufrufe
2.014
Antworten
10
Aufrufe
4.820
  • Artikel
Antworten
5
Aufrufe
2.367
K
Antworten
18
Aufrufe
2.075
R
Zurück
Oben