Java Algorithmus zum herausfinden der längsten kette von Zahlen?

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;
Woher ich das weiß:Studium / Ausbildung – Studium (M.Sc., Dr.) und mehrjährige Berufserfahrung
macminiuser 
Fragesteller
 04.11.2018, 14:19

leider nicht :/ aber danke bei den testwerten 5 5 5 5 1 1 2 2 kommt 2 raus

0
FXG36  04.11.2018, 14:40
@macminiuser

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;
0

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