Plateau auslesen und längste Ebene ausgeben

  • Themenstarter Themenstarter DanTheMan12
  • Beginndatum Beginndatum
D

DanTheMan12

Gast
hi,
da ich nichts passendes finde (weder hier noch sonstewo), versuche ich mir mal Rat von Könnern und Kennern zu holen.

Folgende Problemstellung liegt mir vor:

Schreiben Sie eine Klasse ArrayOperation und implementieren Sie folgende statische Methode:
Eine Methode int plateau(int[] a), die in einem Array von absteigend sortierten ganzen Zahlen das längste Plateau berechnet und als Ergebnis zurückgibt. Der Array a soll dabei aber nur einmal durchlaufen werden.
Hinweis: Ein Plateau ist eine Folge von gleichen Werten. Für den Array a = {8, 8, 7, 4, 4, 3, 3, 3, 3, 2, 2, 2, 1} soll die Methode das Ergebnis 4 liefern.
Erweitern Sie die Klasse um die main-Methode und testen Sie die Methoden, indem Sie ein Array erzeugen und für dieses die Methoden aufrufen.

Java:
public class ArrayOperation {
	
	public static void main (String [] arg) {
		int[] array3 = {8, 8, 7, 4, 4, 3, 3, 3, 3, 2, 2, 2, 1};
		
		System.out.print("plataeu (array3): ");
		plateau(array3);
		
		
	} // main
		
	static int[] plateau (int[] a) {
		int zaehler = 0;                      // zaehler zaehlt die Durchlaeufe bei einer gleichen Zahl
		int aktuellerWert = a[0];		// aktuellerWert wird auf den ersten Wert des Arrays gesetzt
		for (int i = 0; i < a.length; i++) {
			int neuerWert = a[i];                 // im ersten Durchlauf sind neuerWert und aktueller Wert identisch
			if (neuerWert < aktuellerWert) {             // da die Zahlen absteigend sind
				// hier muesste der Zaehler auf 0 gesetzt werden, aber der vorige Wert von zaehler muesste zwischengespeichert werden, damit er zur Verfügung steht, falls keine laengere Ebene mehr kommt
				continue;
			} else if (neuerWert == aktuellerWert) {
				zaehler += 1;                              // soll die Durchlaeufe zaehlen
			}
			aktuellerWert = a[i];                    // aktueller Wert wird wieder auf i gesetzt
		}
		System.out.print(zaehler);	             // das hier kann noch nicht stimmen, da ich den MAX-Wert von zaehler ausgeben muesste	
		return a;                         // was ich als return zurueckgeben soll, weiß ich auch noch nicht so ganz
	} // plateau
} // ArrayOperation

Meine Probleme stehen als Kommentare im Quelltext.
Vielen Dank schon mal für Antworten
 
[JAVA=18]// hier muesste der Zaehler auf 0 gesetzt werden, aber der vorige Wert von zaehler muesste zwischengespeichert werden, damit er zur Verfügung steht, falls keine laengere Ebene mehr kommt[/code]
Werte und auch Zwischenwert speichert man ............... in Variablen ;-) Du benötigst einfach eine zusätzliche Variable die den bisher höchsten ermittelten Wert speichert.

Und zaehler muss an dieser Stelle auf 1 gesetzt werden
 
Java:
public class ArrayOperation {
    
    public static void main (String [] arg) {
        int[] array3 = {8, 8, 7, 4, 4, 3, 3, 3, 3, 2, 2, 2, 1};
        
        System.out.print("plataeu (array3): ");
        plateau(array3);
        
        
    } // main
        
    static int[] plateau (int[] a) {
        int zaehler = 1;                      // zaehler zaehlt die Durchlaeufe bei einer gleichen Zahl
        int aktuellerWert = a[0];       // aktuellerWert wird auf den ersten Wert des Arrays gesetzt
        for (int i = 0; i < a.length; i++) {
            int neuerWert = a[i];                 // im ersten Durchlauf sind neuerWert und aktueller Wert identisch
            if (neuerWert < aktuellerWert) {             // da die Zahlen absteigend sind
                // hier muesste der Zaehler auf 0 gesetzt werden, aber der vorige Wert von zaehler muesste zwischengespeichert werden, damit er zur Verfügung steht, falls keine laengere Ebene mehr kommt
                continue;
            } else if (neuerWert == aktuellerWert) {
                zaehler += 1;                              // soll die Durchlaeufe zaehlen
            }
	if (zaehler > hoechsterWert) {
		hoechsterWert = zaehler;
	}
            aktuellerWert = a[i];                    // aktueller Wert wird wieder auf i gesetzt
        }
        System.out.print(zaehler);               // das hier kann noch nicht stimmen, da ich den MAX-Wert von zaehler ausgeben muesste  
        return a;                         // was ich als return zurueckgeben soll, weiß ich auch noch nicht so ganz
    } // plateau
} // ArrayOperation

meinst du das so? also ich denke die Zwischenspeicherung sollte so funktionieren, allerdings zählt das Programm bisher nur die ersten zwei Zahlen glaube ich, da das Ergebnis "2" ist.
 
so hier ist meine aktuelle Version die soweit auch funktioniert, allerdings spuckt sie noch die falsche Zahl aus. Das Ergebniss müsste 4 sein, ist aber momentan 3. Ich verstehe einfach bisher noch nicht wieso zaehler auf 1 gesetzt werden sollte. Könnte mir das jemand erklären?`Oder gibt es vielleicht einen anderen Fehler?

Java:
public class ArrayOperation2 {
	
	public static void main (String [] arg) {
		int[] array3 = {8, 8, 7, 4, 4, 3, 3, 3, 3, 2, 2, 2, 1};
		System.out.print("plataeu (array3): ");
		plateau(array3);
	} // main
        
	static int[] plateau (int[] a) {
		int zaehler = 0;						// zaehler zaehlt die Durchlaeufe bei einer gleichen Zahl (muss doch bei 0 anfangen oder etwa nicht?)
		int aktuellerWert = a[0];				// aktuellerWert wird auf den ersten Wert des Arrays gesetzt (=8)
		int hoechsterZaehler = 0;
		for (int i = 0; i < a.length; i++) {
			int neuerWert = a[i];				// im ersten Durchlauf sind neuerWert und aktueller Wert identisch
			if (neuerWert == aktuellerWert) {			// wenn neuerWert gleich aktuellerWert dann:
				zaehler += 1;							// soll die Durchlaeufe zaehlen, pro wiederholte (gleiche) Zahl +1 dazuzaehlen
				if (zaehler > hoechsterZaehler) {		// wenn der aktuelle zaehler groeßer als der letzte hoechsterZaehler ist, dann:
					hoechsterZaehler = zaehler;			// hoechsterZaehler auf aktuelle zaehler setzen
				}
			} else if (neuerWert < aktuellerWert) {		// sonst: wenn neuerWert kleiner als aktuellerWert dann Schleifendurchlauf abbrechen und neuen Durchlauf beginnen
				aktuellerWert = a[i];					// sobald eine kleinerer Wert auftritt, wird auch hier der aktuelleWert auf i gesetzt
				zaehler = 0;							// zaehler wird auf 0 gesetzt (dann spuckt er aber 3 anstatt 4 aus) --> ich verstehe nicht wieso 3 und nicht 4
				continue;
			}
			aktuellerWert = a[i];						// aktuellerWert wird wieder auf i gesetzt (entsprechender Wert)
		}
		System.out.print(hoechsterZaehler);
		return a;								// beim return bin ich mir nicht sicher
	} // plateau
	
} // ArrayOperation2
 
ja danke dir - bin den Algorithmus schon auf dem Papier durchgegangen und da ist mir das auch aufgefallen 😀

also der zaehler muss jeweils auf 1

Vielen Dank für deine Hilfe 😉


-Topic ist beantwortet-
 

Neue Themen


Zurück
Oben