Programm verstehen...

Neue Frage »

Auf diesen Beitrag antworten »
Neuling Programm verstehen...

Hey Leute,

wie euch vllt schon mein Nickname verrät, bin ich ein Neuling im Bereich der Informatik/ Programmierung. Ich bring mir alles durch Bücher + Internet bei und hab einige Verständnis probleme und brauch deshalb eure Unterstützung.

Aufgabe:

Bestimmen Sie die Ausgabe des nachfolgenden Java- Programms:

public class BreakAndContinue {
public static void main (String [] args) {
for (int i = 0; i < 100; i ++) {
if (i == 74) break;
if ( i % 9 != 0) continue;
System.println(i);
}
int i = 0;
while (true) {
i++;
int j = i * 30;
if (j == 1260) break;
if (i % 10 != 0) continue;
System.out.println(i);
}
}
}

Meine Ideen:

Soweit ich weiß, wenn ich mich an ein Programm setze und es verstehen will, versuche ich es von außen nach innen zu bearbeiten.

also: i ist gleich 0, deshalb ungleich 74 und das Programm wird deshalb nicht verlassen. Jetzt muss ich 0 % 9 berechnen welches 9 ergibt und ungleich 0 ist, deshalb wird 9 ausgegeben. Was als ergebnis aber auch schon falsch ist, ich aber nicht drauf komme warum.
Desweiteren bin ich mir nicht ganz so sicher ob ich jz die Schleife wiederhole oder erst die while Schleife abarbeite.

Nehmen wir an ich bearbeite zuerst die for - Schleife , dann würde ich den Wert 9 um 1 erweitern , wegen der update wert i++, was dann 10 ist.
10 ist wieder ungleich 74 also weiter . 10 % 9 ist 1 .
usw.

meine Ergebnisse sind allerdings falsch :/

Wo liegen meine Fehler und welche Tipps könnt ihr mir auf meinem Weg mitgeben um solche Programme am besten verstehen zu können.

MFG
Neuling
 
Auf diesen Beitrag antworten »
eulerscheZahl

Programmcode bitte in Zukunft mit [code]...[/code] umschließen, das erhöht die Lesbarkeit.

Zitat:
Jetzt muss ich 0 % 9 berechnen welches 9 ergibt

falsch, das ist 0. Wenn du etwas modulo 9 rechnest, bist du immer im Bereich [0;8] (bzw. [-8;0] für negative Zahlen). Deshalb wirkt hier kein continue und die 0 wird ausgegeben.

Um das Programm zu verstehen:
- versuche es im Kopf Zeile für Zeile durchzugehen, so wie es der PC auch macht
- nutze den Debugger, um das Programm schrittweise zu durchlaufen (geht in der Prüfung natürlich nicht, hilft aber trotzdem für das Verständnis)
- füge Kontrollausgaben hinzu
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
public static void main (String [] args) {
	for (int i = 0; i < 100; i ++) {
		if (i == 74) {
			System.out.println("// i = " + i + ": break");
			break;
		}
		if ( i % 9 != 0) {
			System.out.println("// i = " + i + ": continue");
			continue;
		}
		System.out.println(i);
	}
	int i = 0;
	while (true) {
		i++;
		int j = i * 30;
		if (j == 1260) {
			System.out.println("// j = " + j + ": break");
			break;
		}
		if (i % 10 != 0) {
			System.out.println("// i = " + i + ": continue");
			continue;
		}
		System.out.println(i);
	}
}
Auf diesen Beitrag antworten »
Karlito

@euler Coole und kreative Idee mit dem [code] Tag! Danke!

Gruß,

Karlito
Auf diesen Beitrag antworten »
Neuling

Warum bin ich den im Bereich (0,8) bei modulo mit 9?

und woran erkenne ich, dass das Programmstück
code:
1:
 if ( i % 9 != 0) 

nur Vielfache von 9 ausgeben?
 
Auf diesen Beitrag antworten »
eulerscheZahl

Das ist eben die Definition von modulo, das ist der Rest bei der Division:
9 / 9 = 1 Rest 0 --> 9%9 = 0
10 / 9 = 1 Rest 1 --> 10%9 = 1
18 / 9 = 2 Rest 0 --> 18%9 = 0
einen Rest, der >= dem Divisor ist, wird es nicht geben.

Die Zeile die du kopiert hast, gibt gar nichts aus.
code:
1:
if (i % 9 != 0) continue;

wenn i%9 ungleich 0 (=wenn i nicht Vielfaches von 9), dann brich den aktuellen Schleifendurchlauf ab und mache mit der nächsten Zahl weiter.
Das, was da noch übrigbleibt (also die Vielfachen von 9) wird dann ausgegeben.


Die Idee mit [code] habe ich glaube ich mal im C++ Forum gesehen, dort zensieren Sie "vorraus" und "Standart" smile .
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »