Hallo, ich habe ein paar Fragen zu folgendem Programm:
public class Main {
static void schleifenMethode(int a) {
for (int i = 0; i
Hallo, ich habe ein paar Fragen zu folgendem Programm:
public class Main {
static void schleifenMethode(int a) {
for (int i = 0; i
Habe ich das so richtig verstanden?
Entsprechend deiner Beschreibung scheinst du es richtig verstanden zu haben…
Aber Wieso kann bei der Methode schleifenMethode(int a) für den Übergabeparameter und für die Variable vom Typ Integer der main-Methode der gleiche Name verwendet werden?
Hallo
im Prinzip haben Sie das richtig beschrieben, es ist nur ein Dreher drin:
Die innere Schleife mit der jeweiligen Spalte (j) wird für jede Zeile (i) durchlaufen, nicht umgekehrt. Im ersten Durchlauf bleibt i also 0, während j von 0 bis 4 hochgezählt wird. Dann wird i um 1 erhöht und j wird erneut von 0 bis 4 hochgezählt.
Also:
a=1, i=0, j=0
a=2, i=0, j=1
a=3, i=0, j=2
a=4, i=0, j=3
a=5, i=0, j=4
a=6, i=1, j=0
a=7, i=1, j=1
a=8, i=1, j=2
a=9, i=1, j=3
a=10, i=1, j=4
usw.
Das Programm gibt dann korrekt folgendes aus:
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
Okay das hab ich jetzt verstanden.
Jetzt gibts zu dem Programm noch folgende Aufgabe und ich weiß nicht, was damit gemeint ist:
Wieso kann bei der Methode schleifenMethode(int a) (Zeile 3) für den Übergabeparameter und für die Variable vom Typ Integer (Zeile 22) der main-Methode der gleiche Name verwendet werden?
Bei a handelt es sich nicht um eine Klassen-Variable, die übergreifend in der ganzen Klasse gilt, sondern um zwei lokale Variablen, die beide den gleichen Namen, ansonsten aber nichts miteinander zu tun haben.
Aus Sicht des Programms hat die Variable a in Zeile 3 nichts mit der Variable a in Zeile 22 zu tun. Beide sind nur innerhalb der jeweiligen Methode sichtbar und beide können deswegen beliebig benannt werden, ohne dass es da einen Konflikt gibt.
In diesem konkreten Fall heißt das:
Nach dem Aufruf der schleifenMethode in main hat a in main immer noch den Wert 0. Nur der Wert von a in der schleifenMethode ändert sich.
Nach dem Aufruf der schleifenMethode in main hat a in main
Ist a da nicht schon 1? weil da steht int a = 1;
Sorry, das war ein Vertipper. a ist natürlich 1 und nicht 0.
Okay dann scheints mir jetzt logisch zu sein.
Ich muss jetzt noch die for-Schleife in dem Programm durch eine while-Schleife ersetzen.
Muss ich das in Konbination einer if-Schleife machen oder ist das auch anders möglich?
Hi,
siehe unten im Text
nicht ganz korrekt. Dein j ist der Zähler für die Spalte und i der für die Zeile. Für jeden Durchlauf von i wird j von 0-4 durchgezählt und hintereinander immer wieder ein neues a ausgegeben. Danach erfolgt ein Zeilenwechsel. Und zwar für jedes i (0-4).
Wenn beide Schleifen beendet sind gibt es die Variablen nicht mehr, daher werden die auch nicht zurückgesetzt. Beachte immer die Gültigkeit einer Variablen. Dein j existiert erst ab der Definition (Beginn der Schleife) und ist nach der Klammer direkt nach dem a++ nicht mehr da usw.
Ja ich vertausch immer das i mit dem j.
Aber so wie du das erklärt hast versteh ich das jetzt.
Ich muss jetzt noch die for-Schleife in dem Programm durch eine while-Schleife ersetzen.
Muss ich das in Konbination einer if-Schleife machen oder ist das auch anders möglich?
Ja ich vertausch immer das i mit dem j.
Aber so wie du das erklärt hast versteh ich das jetzt.
Ich muss jetzt noch die for-Schleife in dem Programm durch
eine while-Schleife ersetzen.
wozu? Was genau willst du erreichen?
Muss ich das in Konbination einer if-Schleife machen oder ist
eine if-Schleife gibt es nicht
das auch anders möglich?
Kommt drauf an was das Programm tun soll. Wenn du nur die Zahlen von 1-25 in einer 5x5 Matrix ausgeben willst dann ist es bereits korrekt.
Die Variable a ist eine lokale Variable. Darum ist sie nur innerhalb der main-Methode zu benutzen. Obwohl die schleifenMethode-Methode aus der main aufgerufen wird, kann schleifenMethode nicht auf die (main-)lokale Variable zugreifen.
In deinem Codebeispiel kann aus schleifenMethode auf eine Variable mit dem Namen a zugegriffen werden. Dies ist aber nicht die Variable a aus der main-Methode. Durch die Parameterdefinition mit dem Namen a gibt es wieder eine (schleifenMethode-)lokale Variable a.
Zur Veranschaulichung:
-Versuche doch mal, den Parameter für die schleifenMethode-Methode anders zu benennen.
-Eventuell kannst du ja auch mal den Aufruf der schleifenMethode auf ‚schleifenMethode(5)‘ ändern.
Weil die Aufgabenstellung so lautet:
Ändern Sie den Quellcode dahingehend ab, dass die for-Schleife durch
eine while-Schleife ersetzt wird. Was müssen Sie hierbei beachten?
na dann beachte einfach nur die Einzelteile der for-Schleife.
z.B. für for(int i=0; i[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Nein, eine if-Abfrage ist nicht notwendig. Ein for-Schleife ist im Prinzip eine while-Schleife, nur in kompakterer Notierung.
Das hier ist vom Ablauf her das gleiche:
for (int i=0; i
braucht man dafür 2 ineinander geschachtelte while-Schleifen?
Und wo muss ich da einbauen, dass die Zahl a bei jedem Schleifendurchlauf um 1 erhöht wird?
braucht man dafür 2 ineinander geschachtelte while-Schleifen?
na etwas selbst denken müsstest du schon
Ich hab jetzt 2 while-Schleifen erstellt, jedoch gibt er mir nur die 1. Zeile des Arrays aus:
public class Main {
static void schleifenMethode(int a) {
int i = 0;
int j = 0;
while (i