Ah hey, du schon wieder ;)
Also, versuch ich's doch noch mal:
Ich werde versuchen dir wieder erst meinen Lösungsansatz zu beschreiben, und dann zu zeigen wie ich es umsetze.
Ich möchte, das die Zahlenkette genommen wird und zum beispiel alle Zahlen ausgibt, die größer als die letzte Zahl der zahlenkette sind, aber auch sich selber!
beispiel: (was in der klammer ist, fällt weg!)
8721833211314=87(21)8(3321131)4 = 8784
Okay, du hast also ein Array mit deiner Zahlenkette - ich nenne es in meinen Beispielen mal zahlen[ ].
Ich bin nicht ganz sicher ob du die zahlen die du versuchst zu ermitteln, nur ausgeben möchtest, oder auch in einem Array speichern willst - ich geh' mal von letzterem aus, schließlich kannst du das Array mit dem Ergebniss dann ja auch einfach ausgeben lassen.
Erster Tipp den ich dir generell geben kann: Versuche beim Programmieren (und eigentlich auch sonst im Leben) immer dein Problem in möglichst viele kleine Probleme zu zerlegen, und löse die dann Schritt für Schritt. Probieren wir das mal:
Ich möchte, das die Zahlenkette genommen wird und zum beispiel alle Zahlen ausgibt, die größer als die letzte Zahl...
Ah Stop, hier ist die erste Aufgabe die es zu lösen gilt: Finde heraus was die letzte Zahl ist. Du erinnerst dich vielleicht noch an die Lösung aus dem anderen Beispiel?
Ein Array hat Elemente und eine Länge. Stell dir ein Array namens myArray vor, es sieht folgendermaßen aus:
myArray
Index: | 0 | 1 | 2 | 3 |
Element: | b | e | f | s |
Was ist die Länge dieses Arrays? Antwort: Vier. Die Länge ist die Anzahl der Elemente die es hat. Und da oben stehen ja, wie man sieht, vier Buchstaben. Aber was steht an Index 4? Richtig, gar nix. Weil der Index bei 0 angefangen hat zu zählen, aber die Anzahl der Elemente bei 1 anfängt zu zählen. Wenn du das letzte Element willst brauchst du also die Länge (.lenght) weniger 1.
Also gilt (in deinem Fall, vergiss ab hier myArray wieder):
int letzteZahl = zahlen[zahlen.length-1]
Java ist ja so freundlich uns .length mitzuliefern, in anderen Sprachen (etwa c++) ist das ein wenig aufwendiger.
Gut, jetzt weißt du, was die Letzte Zahl ist - was kam als nächstes?
und zum beispiel alle Zahlen ausgibt, die größer als die letzte Zahl der zahlenkette sind, aber auch sich selber!
Ah genau, du willst also das Array mit den Zahlen durchgehen, und bei jedem Element gucken, ob es größer oder gleich groß ist wie die Letzte Zahl.
Bauen wir erstmal eine Schleife dafür:
for (int i; i<zahlen.lenght; i++){
//... hier willst du was abfragen
}
Wie könnte die Abfrage denn aussehen? Naja die Schleife soll ja alle Elemente von zahlen[ ] durchlaufen, und du möchtest wissen, ob das Element welches gerade betrachtet wird, größer oder gleich ist, wie das letzte Element.
"zahlen[i]" ist schon mal das Element, welches gerade betrachtet wird.
das letzte Element hast du auch schon: "letzteZahl."
Also lautet die Frage: Ist zahlen[i] größer/gleich letzteZahl?
Wie sieht das als if-abfrage aus?
if (zahlen[i] >= letzteZahl){...}
Ich bastel dir da noch mal eine for-each Schleife drauß, wie in dem letzten Beispiel - erinnerst du dich noch? Muss man nicht so machen, ist aber hübscher (und einfacher):
for (int i : zahlen){
if (i >= letzteZahl){
myArrayList.add(i);
}
}
Nächste Aufgabe:
Dann würde ich gerne wissen, wie man die Formel umformt, damit nur die letzte zahl zusammengerechnet wird:
beispiel: (was in der klammer ist, fällt weg!)
87321233478213133 = (87)3(212)33(47821)3(1)33 = 3 33 3 33= 1 2 1 2
Also, das hast du ja in deinem Buchstaben-Beispiel schon ganz ähnlich gemacht: Denken wir wieder Schritt für Schritt... Was gibt es zu tun?
Das Array Zahl für Zahl durchlaufen und rausfinden, ob die Zahl die wir angucken die gleiche Zahl ist, wie die letzte Zahl. Wenn die zahl die gleiche ist, dann wollen wir zählen.
Fangen wir an: Das Array Zahl für Zahl durchlaufen - kennste schon:
for (int i; i<zahlen; i++){
/*...rausfinden, ob die Zahl die wir angucken die
gleiche Zahl ist, wie die letzte Zahl.*/
}
Nächster Schritt: rausfinden, ob die Zahl die wir angucken die gleiche Zahl ist, wie die letzte Zahl - kennst du auch schon:
letzte Zahl: letzteZahl = zahlen[zahlen.length-1];
aktuelle Zahl: zahlen[i]
if (zahlen[i] == letzteZahl){
/*...Wenn die zahl die gleiche ist, dann wollen wir
zählen*/
}
und als letztes: Wenn die zahl die gleiche ist, dann wollen wir zählen - also wie machen wir das? Du hast es in deinem Buchstabenbeispiel schon ganz ähnlich umgesetzt... Wir führen eine neue Variable ein mit der wir uns merken, wie oft zahl[i] == letzteZahl war. Diese Variable zählen wir immer einen hoch, wenn zahl[i] == letzteZahl ist, und wenn nicht, dann setzen wir sie zurück, und adden sie zu unserer ArrayList (die ich hier myArrayList nenne). Es gäbe auch unzählige andere Möglichkeiten außer einer ArrayList, aber da du es so machst bleib ich mal dabei:
if (zahlen[i] == letzteZahl){
count++
} else {
count = 0;
myArrayList.add(count);
}
Wenn du das zusammensetzt hast du die Lösung - wie immer auch hier mein Tipp: for-each :P Problem Gelöst - NEXT!
Dann würde ich gerne wissen wie man es so baut, das die letzte zahl zusammen gezählt wird und alles was drüber ist (die eckigen klammern sind über der letzten zahl, die runden klammern drunter und was keine klammer hat ist wie die letzte zahl)
87321233478213133 = [87]3(212)33[478](21)3(1)33 =
[2] 1 () 2 [3] ()1 () 2 = 2 1 2 3 1 2
Du willst also genau das gleiche machen wie in dem Probelm davor - nur dass du diesmal nicht nur die gleiche Zählst, sondern auch die, die größer sind.
Step-By-Step:
Das Array Zahl für Zahl durchlaufen und rausfinden, ob die Zahl die wir angucken die gleiche Zahl ist, wie die letzte Zahl. Wenn die Zahl die gleiche ist, dann wollen wir zählen. Oder ob die Zahl die wir angucken größer ist als die Letzte Zahl. Wenn die Zahl größer ist, dann wollen wir auch (separat) zählen.
Du siehst - fast die gleiche Aufgabenstellung. Du brauchst lediglich eine Bedingung und einen counter mehr:
if (zahlen[i] == letzteZahl){
countEqual++
if (countGreater > 0){
countGreater = 0;
myArrayList.add(countGreater);
}
} else if (zahlen[i] > letzteZahl) {
countGreater++
if (countEqual > 0){
countEqual = 0;
myArrayList.add(countEqual);
}
} else {
if (countEqual > 0){
myArrayList.add(countEqual);
} else if (countGreater > 0){
myArrayList.add(countGreater);
}
countEqual = 0;
countGreater = 0;
}
Zudem würde ich gerne noch wissen wie man nicht die letzte Zahl sondern die erste oder zb 5 zahl nimmt und mit der einen abgleich tätigt.
Die erste Zahl eines Arrays steht immer an Index? Nah? Nah? Komm Schon! Riiichtig... 0! ;)
Fragst du nach der ersten Zahl, fragst du nach array[0].
Die 5. Zahl steht immer an Index? Richtiiig... 4.
Gleiches Spiel: array[4].
und ich würde gerne noch wissen wie man anstatt mit der Letzten zahl, das ganze durchsucht mit der letzten zahl +3 oder -2 oder ähnliches!
Wie du die letzte Zahl rausfindest hatten wir ja oben schon. int letzteZahl = array[array.length-1]. Letzte Zahl +3 ist also? letzteZahl+3; easy as that ;)
soo, das war's erstma... viel Erfolg