Frage von leonardomessi, 46

Ein Array eintrag countdown?

hallo leute also ich schreibe die klasur in 2 wochen und stolpere ab und zu bei rekursiven funktionen.. die aufgabe lautet die einträge eines Arrays abwärts runter zu zählen. als beispiel : int[]a={6,5,8}; auf der console soll dies ausgegeben werden 6,5,4,3,2,1 5,4,3,2,1 8,7,6,5,4,3,2,1 die Methode soll "void" sein und bitte Java programmiersprache bei den antworten benutzen(bin noch anfänger)

ich habe bis jetzt diesen code geschrieben aber scheint nicht richtig zu funktionieren den er spuckt nur a[0]

public static void listOfCountDowns(int[]a, int pos){

    if(pos<0){
        System.out.println();
    }else{
        System.out.print(a[0]);
        a[0]=a[0]-1;
        listOfCountDowns(a, pos-1);
    }
}
public static void main(String[]args){
    int[]b={5};
    listOfCountDowns(b,b.length-1);
}

}

Antwort
von hummelxy, 12

Hallo leonardomessi,

schaue dir vor dieser Aufgabe bitte meine Antwort zu dieser Frage an: https://www.gutefrage.net/frage/such-algorithmus-problem?foundIn=list-answers-by...

Wenn du den Sinn und den Ablauf des ersten Programms verstehst, dann kannst du das Wissen recht einfach auf diese Aufgabe projizieren.

Damit deine Klausur auch etwas wird, helfe ich dir auch hier gerne weiter! Für diese Aufgabe muss man etwas weiter denken, als eine Schleife erlaubt. Um die Aufgabe zu bewältigen, benötigst du eine Schleife in einer Schleife. Das mag kompliziert klingen, wenn man es aber einmal verstanden hat, dann ist das gar nicht mehr so schwer!

Bevor du mit dem Code anfängst, solltest du dir einen Plan machen. Was muss das Programm könnne? Wie könnte ich es aufbauen? Hattet ihr schon UML-Struktorgramme? Diese helfen dir sehr, den Schleifen- und Verzweigungsaufbau besser zu verstehen. Wenn ihr in der Schule(?) schon so weit seid, dann schaue dir dieses Kapitel noch mal sehr genau an. In der Informatik ist es nämlich immer so: Übung macht den Meister! Das ist wie Mathe, Lernen bringt dir nur bedingt etwas...

Also solltest du dir jetzt folgende Plan machen:

1. Damit ich jeden Array-Wert erreiche, brauche ich schon mal eine Schleife, um jeden Wert zu erreichen.

2. Wenn ich den ersten Array-Wert habe, dann möchte ich diesen wieder auf 0 runter zählen. Somit brauche ich eine weitere Schleife, die den Startwert des ArrayIndexes bekommt und dann runterzählt.

3. Wie gebe ich die Ausgabe auf der Konsole aus? Damit es übersichtlich bleibt, muss ich also nach jedem Array-Index eine Line-break einbauen.

4. Was ist, wenn eine negativer Wert im Array ist? Oder wenn er 0 ist? Für beide Eventualitäten benötige ich eine Verzweigung!

Da ihr anscheinend noch keine Methoden hattet, lassen wir das externe Methodenaufrufen einfach mal raus! -> Ist dann mehr Code, macht aber nichts.

Nun arbeitest du die Liste ab und schreibst den Java-Code. Damit du auch eine ausführliche Lösung hast, habe ich dir hier eine geschrieben. Wie ich bereits bei deiner anderen Frage geschrieben habe: Erst selbst probieren und dann die Lösung betrachten! Stures copy-and-paste bringt dich in diesem Stadium absolut nicht weiter! Ich wünsche dir weiterhin viel Erfolg und hoffe, du hast in deiner Klausur ein Erfolgserlebnis!

PS: Für diesen bescheuerten Tab-Aufbau ist gutefrage.net verantwortlich, in Eclipse war der Aufbau perfekt. Aber das sollte dich nicht am Lösen hindern.

public static void main(String[]args) {
// Deklariere Array mit Zahlen!
int[] dein_Array = {10, -5, 0, 0, 4, 5};
// Rufe Methode zaehleArray auf und übergebe das oben deklarierte Array!
zaehleArray(dein_Array);
}

public static void zaehleArray(int[] array) {

// For-Schleife, die jeden Wert des Arrays durchläuft. Hier: Erst 10, dann -5, dann 0, dann 0, dann 4, dann 5!
for(int i = 0; i < array.length; i++) {

// Wenn der aktuelle Wert (siehe oben!) größer als null ist!
if(array[i] > 0) {
// Dann bilde zweite Schleife, die vom aktuellen Wert runter auf null zählt!
for(int zaehler = array[i]; zaehler >= 0; zaehler--) {
// Gebe die Zählwerte aus!
System.out.print(zaehler + " ");
}
// Gebe zum Schluss einen Line-break aus, damit alle Array-Zahlen übersichtlich ausgegeben werden!
System.out.println();
}

// Wenn der aktuelle Wert (siehe oben!) kleiner als null ist!
if(array[i] < 0) {
// Dann bilde zweite Schleife, die vom aktuellen Wert hoch auf null zählt!
for(int zaehler = array[i]; zaehler <= 0; zaehler++) {
// Gebe die Zählwerte aus!
System.out.print(zaehler + " ");
}
// Gebe zum Schluss einen Line-break aus, damit alle Array-Zahlen übersichtlich ausgegeben werden!
System.out.println();
}

// Wenn der aktuelle Wert (siehe oben!) genau null ist!
if(array[i] == 0) {
// Dann gebe einfach nur null aus, denn von 0 kann man nicht hoch bzw. runter auf null zählen!
System.out.println("0");
}

// End-Schleife!
}

// Ende statische Methode! ; kein return, da Methode void ist!
}
Antwort
von Kaenguruh, 18

Liefere bitte mal die genaue Schnittstellenspezifikation der Funktion, die Du schreiben sollst. Also, was rein geht und was rauskommen soll. Die müßt ihr von eurem Lehrer geliefert bekommen haben. 

Antwort
von RakonDark, 17

die ausgabe ist immer

System.out.print(a[0]);

die zuweisung

a[0]=a[0]-1;

reduziert den wert in a[0]

willst du durch das array  brauchst du dort aber die position

System.out.print(a[pos]);

Keine passende Antwort gefunden?

Fragen Sie die Community