Operatoren Vielfaches durch Text ersetzen

ekago

Mitglied
Hallo zusammen,
meine Aufgabe lautet wie folgt:
1. Schreiben Sie ein Programm, das alle Zahlen von 1000 bis 1999 ausgibt.
2. Ändern Sie das Programm so, dass nur die Vielfachen von 20 zwischen 1000 und 1999
ausgegeben werden. (Tipp: benutzen Sie continue)

3. Ändern Sie das Programm so, dass statt der Vielfachen von 50 der Text “Zonk!” ausgegeben
wird

Die ersten zwei Aufgaben habe ich bereits selber gelöst bei der dritten hänge ich leider ich weiß ehrlich nicht wie ich die Klammern ansetzen muss

Java:
for (int i = 1000; i <= 1999; i++){
			
			if (i%20!=0){
				continue;
			}
			System.out.println(i);
			if (i%50==0){
				continue;
			}
				System.out.println("Zank!");
				
				
				 }
 

Gucky

Top Contributor
Ich möchte deinem Lehrer nicht zu nahe treten aber der Code ist grottig.
Du hast nichts falsch gemacht, da die Aufgabenstellung es so verlangt aber das ist kein guter Code. Ohne continue wäre das Ganze wesentlich leichter zu lesen.

Ersetz mal das zweite continue durch den Sysout darunter.
 

ekago

Mitglied
ja das problem egal wie ich es probiere ist einfach dass ich ständig dieses Ergebnis rausbekomme
1000
Zank!
1020
1040
1060
1080
1100
Zank!

dass "Zank" immer nach dem durch 50 Teiler kommt
 

Gucky

Top Contributor
Da die Aufgabenstellung nicht explizit die Verwendung von continue verlangt, kannst du es auch ohne machen. Versuch das mal nur mit if, else if und if zu lösen.

Falls du es doch unbedingt mit continue lösen musst:
Das liegt daran, dass du die Ausgabe der Zahl unabhängig von der Ausgabe von "Zank" machst. Die müssen durch ein exklusives Oder verknüpft werden also entweder gibst du die Zahl aus oder "Zank".
 

ekago

Mitglied
Ich hab das jetzt so mal versucht
es klappt auch nicht nur die erste Zahl wird mir durch Zink ersetzt
Ich weiß nicht was ich falsch mach


Java:
		for (int i = 1000; i <= 1999; i++){
			
			if (i%20!=0)
				System.out.println(i); 
			
			else if (i%50==0){
			
		System.out.println("Zink");
			}
			else {
				System.out.println(i);
			}
		}
	}
			}
 

Gucky

Top Contributor
Die erste Bedingung ist falsch, weil du alle Zahlen, die keine Teiler von 20 sind ausgibst.

Fasst man dein Programm ein bisschen zusammen steht dort: wenn i kein Vielfaches von 20 ist, gib i aus. Ansonsten gib i aus. Das macht keinen Sinn.

Im ersten if müsste noch der Test auf das Vielfache von 50 enthalten sein, weil du sonst alle Zahlen, die Vielfache von 20 und 50 sind nicht durch "Zink" ersetzt.
 

ekago

Mitglied
ja aber ich will ja nur die vielfache von 50 durch zink ersetzt bekommen die vielfache von 20 sollten normal ausgegen werden

ich hab das jetzt mal so versucht ich glaube ich komme der sache schonn näher jedoch ist mir aufgefallen dass nicht alle zahlen die vielfache von 50 sind durch zink ersetzt werden woran das wohl liegt;(

Java:
		for (int i = 1000; i <= 1999; i++){
			
			if (i%20==0)
				System.out.println(i); 
			else if (i%50==0)
				System.out.println("Zink");
			
			
		}}}

Die Ausgabe sieht so aus
Java:
1000
1020
1040
Zink
1060
1080
1100
1120
1140
Zink
1160
1180
1200
1220
1240
Zink
1260
1280
1300
1320
1340
Zink
1360
1380
1400
1420
1440
Zink
1460
1480
1500
1520
1540
Zink
1560
1580
1600
1620
1640
Zink
1660
1680
1700
1720
1740
Zink
1760
1780
1800
1820
1840
Zink
1860
1880
1900
 

hauptDev

Bekanntes Mitglied
Guckt dir mal die Funktionsweise einer if-Verzweigung an, ganz besonders, wenn man mit
else-if und else arbeitet.
Was fällt dir bei deinen Zahlen auf?
Genau, es werden immer die Zahlen nicht durch Zink ersetzt, welche gleichzeitig durch 20 teilbar sind!

Das liegt an der Verzweigung:
Wenn die Zahl durch 20 teilbar ist, wird die Zahl ausgegeben, da die Bedingung zutrifft und der If-Block ausgeführt wird, wird die else-if gar nicht mehr beachtet.
 
Zuletzt bearbeitet:

ekago

Mitglied
Dann müsste das ja so stimmen oder ???
Java:
	for (int i = 1000; i <= 1999; i++){
			
			if (i%20==0 && i%50==0)
		System.out.println("Zink");
			
			else if (i%20==0)
			{
				System.out.println(i);
			}
			
		}}}


Das war zwar grad eher glück glaub aber die ausgabe sieht gar nicht mal so schlecht aus
 

Neue Themen


Oben