Alles anzeigenBeispiel:
int a[]= {2,5,5,5,4,4,3,2,4,2,3,3};In diesem Fall besitzt das Array "a" 3 Plateaus:
-Ein Plateau mit den Werten 5 an der Position 1 mit der Länge 3
-Ein Plateau mit dem Wert 4 an der Position 8 mit der Länge 1
-Ein Plateau mit den Werten 3 an der Position 10 mit der Länge 2Das Plateau mit den Werten 5 an der Position 1 ist also das längste Plateau in diesem Array.
SCHREIBEN SIE EIN PROGRAMM WELCHES DIE POSITION UND DIE LÄNGE DES LÄNGSTEN IINTEGER-ARRAYS AUSGIBT. HIERBEI KANN DAS ARRAY DAS UNTERSUCHT WERDEN SOLL IM PROGRAMM DEKLARIERT UND INITIALISIERT WERDEN.
Hier mein bisheriger Text:
public class Plateau {
public static void main (String[]args){
int[]a = new int[10];
a[0] = 2;
a[1] = 5;
a[2] = 5;
a[3] = 5;
a[4] = 4;
a[5] = 4;
a[6] = 3;
a[7] = 2;
a[8] = 3;
a[9] = 3;
for (int i=0;i<a.length;i++){
System.out.println("Wert a[' +i+ '] = "+a[i]);
}
}
}
Hi Frohe Festtage erstmal!
Zunächst einmal, ja du hast das Array korrekt deklariert und initialisiert und für dein Beispiel auch mit den korrekten Werten befüllt.
Die Definition hat aber einen kleinen Hacken, da das letzte Plateau z.B. keine kleineren Werte sondern einfach gar keine Werte mehr hat, dies steht so aber nicht im Text.
Der Ansatz der Schleife ist erstmal richtig, du musst ja das komplette Array einmal durchlaufen, um alle Werte geprüft zu haben.
Das hast du also bisher gemacht:
Dröseln wir deine Bedingungen mal in Informatikersprache auf, du willst in dem Array ein Plateau erkennen, ein Plateau beginnt immer mit einer höheren Zahl und endet immer mit einer niedrigeren.
Das bedeutet wir haben die Drei Bedingungen, das ein Plateau beginnt, das es andauert und das es endet
Arraydeklarierung / Inizialisierung
for-Schleife ( gesamte Array durchlaufen) {
// FALL 1
if-Bedingung (aktueller_Wert > vorherieger_Wert ){
// behaupte erstmal das ein neues Plateau begonnen hatte
}
// FALL 2
if-Bedeingung( aktuelle_Wert > nächster_wert && Plateau_hatte_begonnen) {
// das Plateau hatte Begonnen und ist beendet
}
// FALL 3
if-Bedingung (akuteller_Wert = nächster_Wert && Plateau_hatte_begonnen) {
// Ein Plateau dauert an
}
}
Alles anzeigen
So nun da du weißt, wie du ein Plateau bestimmen kannst, benötigst du nun noch 3 Variabeln:
1 eine Temporäre Variabel mit der du die Länge des aktuellen Plateaus bestimmen kannst
2. die länge des längsten Plateaus, die ersetzt wird, sobald das aktuelle Plateau länger ist
3. die Position ab der dieses Beginnt (damit du das später zuordnen kannst , z.B. "das Platea 5 mit der länge 3 an der Stelle 2")
Arraydeklarierung / Inizialisierung
Deklariung / Initialisierung von MAX_LAENGE_PLATEAU mit Länge 0 und INDEX_POSITION mit Position 0
Deklariung / Initialisierung von TEMP_LAENGE
for-Schleife ( gesamte Array durchlaufen) {
// FALL 1
if-Bedingung (aktueller_Wert > vorherieger_Wert ){
// behaupte erstmal das ein neues Plateau begonnen hatte
TEMP_LAENGE auf 1 setzen
}
// FALL 2
if-Bedeingung( aktuelle_Wert > nächster_wert && Plateau_hatte_begonnen) {
// das Plateau hatte Begonnen und ist beendet
if-Bedingung(TEMP_LAENGE > MAX_LAENGE_PLATEAU) {
// Das aktuelle Plateau ist länger als das vorherige
// Speichern
MAX_LAENGE_PLATEAU = TEMP_LAENGE
INDEX_POSITION = i
}
}
// FALL 3
if-Bedingung (akuteller_Wert = nächster_Wert && Plateau_hatte_begonnen) {
// Ein Plateau dauert an
TEMP_LAENGE um eins erhöhen
}
}
Alles anzeigen
Zum Schluss gibst du dann nur noch deine gespeicherten Werte NACH der Schleife aus und schon hast du dein Ergebnis.