Java Algorithmus zum herausfinden der längsten kette von Zahlen?
Wie der Titel bereits aussagt soll ein Algorithmus entwickelt werden der am Ende die Anzahl der elemente der längsten kette von sich wiederholenden Zahlen ausgibt also beispiel: 1 1 1 1 2 2 2 2 2 1 2 4 4 4 4 4 4 4 4 4 soll 9 ausgeben da die reihe der vieren nach der 2 die längste kette ist mein Programm bis jetzt sieht wie folgt aus
meine Frage ist jetzt wo liegt hier mein Fehler?
3 Antworten
wo liegt hier mein Fehler?
Diese Frage solltest du dir zunächst einmal stellen. Beschreibe genau, wie das aktuelle Verhalten ist und inwiefern es sich vom gewünschten Ergebnis unterscheidet. Dies ist oft ein Ansatzpunkt, dem Fehler auf die Schliche zu kommen.
Wenn ich mir deinen Code betrachte, sehe ich einige Zeilen, die sofort raus könnten (ungenutzte Variablen oder der Gebrauch von i). Außerdem solltest du alle Zeilen richtig einrücken.
Logisch betrachtet musst du deine Zähler stets zurücksetzen, wenn eine andere Zahl ihre Kette durchbricht. Ich würde dabei einen Zähler verwenden, der die aktuelle Anzahl zählt und einen Zähler, der die maximale Anzahl in sich hält:
current is 1 if at least 1 input given
max = 0;
old = first input
while input
if old == input
++current
else
max = max(current, max)
current = 1
old = input
max = max(current, max)
Ohne es getestet zu haben :P
Klappt das?
int groessteFolgeZahl = -1;
int groessteFolgeAnzahl = -1:
int aktuelleZahl = -1;
int letzteZahl = -1;
int aktuelleFolgeAnzahl = 1;
while(SC.hasNextInt()) {
aktuelleZahl = SC.nextInt();
if (letzteZahl == aktuelleZahl) aktuelleFolgeAnzahl++;
else {
if(aktuelleFolgeAnzahl > groessteFolgeAnzahl) {
groessteFolgeAnzahl = aktuelleFolgeAnzahl;
groessteFolgeZahl = aktuelleZahl;
}
aktuelleFolgeAnzahl = 1;
}
letzteZahl = aktuelleZahl;
}
int ergebnisZahl = groessteFolgeZahl > -1 ? groessteFolgeZahl : aktuelleZahl;
int ergebnisFolgenanzahl = groessteFolgeZahl > -1 ? groessteFolgeZahl : aktuelleFolgeAnzahl;
Das passiert, wenn man nicht durchkompiliert. Das sollte gehen:
int groessteFolgeZahl = -1;
int groessteFolgeAnzahl = -1;
int aktuelleZahl = -1;
int letzteZahl = -1;
int aktuelleFolgeAnzahl = -1;
while(SC.hasNextInt()) {
aktuelleZahl = SC.nextInt();
if (letzteZahl == aktuelleZahl) aktuelleFolgeAnzahl++;
else {
if(aktuelleFolgeAnzahl > groessteFolgeAnzahl) {
groessteFolgeAnzahl = aktuelleFolgeAnzahl;
groessteFolgeZahl = letzteZahl;
}
aktuelleFolgeAnzahl = 1;
}
letzteZahl = aktuelleZahl;
}
int ergebnisZahl = groessteFolgeZahl > -1 ? groessteFolgeZahl : aktuelleZahl;
int ergebnisFolgenanzahl = groessteFolgeAnzahl > -1 ? groessteFolgeAnzahl : aktuelleFolgeAnzahl;
Hi ich Wollte Fragen ob du die Lösung schon hast bzw. das richtige Programm für deine Aufgabe. Habe so eine ähnliche Aufgabe und würde mich sehr über deine Hilfe freuen
leider nicht :/ aber danke bei den testwerten 5 5 5 5 1 1 2 2 kommt 2 raus