Index 0 out of bounds for length 0

Baktash

Neues Mitglied
die Aufgabe scheint so (Schreiben Sie ein Programm Plateau, welches eine beliebige Anzahl ganzer Zahlen (positiv und negativ) entgegennimmt und sowohl die Position, als auch die Länge des längsten Plateaus innerhalb dieser Werte bestimmt. Als Plateau wird eine zusammenhängende Folge gleicher Werte bezeichnet, wobei die Werte direkt vor und direkt nach dieser Folge kleiner sind).
ich bekomme eine Fehler (Index 0 out of bounds for length 0 ).


Java:
public class Plateau
{
 public static void main(String[] args) {
        int N = Integer.parseInt(args[0]);
        int argument = args.length;
        int [] array = new int [N];
        int new_length=0;
        int location=0;
        int max=0;
        int current_length=0;
        if(argument < 2)
        {
            System.out.println("ERROR: Bitte mehr als 2 Zahlen angeben"); 
            return;
        }else{
            System.out.println("Kein Plateau");
            
        }
        for (int i=0; i < N; i++){
            int number = Integer.parseInt(args[i]);
            array [i] = number;
        }
        int compare=array[0];
        for (int l=0; l<N; l++){
            if (array[l] < compare){
                current_length=0;
                compare = array[l];
            }
            else if (array[l] == compare){
                current_length+=1;
                compare = array[l];
            }
            else if (array[l] > compare){
                compare=array[l];
                l++;
            }
            compare= array[l];
            for (int b=0; b<N; b++){
                if (current_length > max){
                    max = current_length;
                    location = array[l];
                    new_length=max-1;
                }
                else if (current_length==1){
                    new_length=max;
                }
            }
        }
        System.out.println(location);
        System.out.println(new_length);
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Code bitte immer in Code Tags posten (Der Knopf </> über dem Eingabebereich)
Und dann auch bitte den genauen Ort angeben, wo du den Fehler bekommst. In welcher Zeile wird die Exception geworfen?
 
Ich hatte immer im Verlauf des Codes gesucht und da nichts gefunden ... es wird vermutlich schon in der ersten Zeile knallen:
Java:
int N = Integer.parseInt(args[0]);

Du versuchst da den ersten übergebenen Parameter auszuwerten. Da setzt aber voraus, dass Du das Programm mit Parametern startest.

Daher solltest Du auf args nur nach einer Prüfung zugreifen um dem Anwender ggf. eine Meldung zu geben, was erwartet wird.

Je nach verwendeter IDE ist es unterschiedlich, wo die Parameter angegeben werden. Bei Aufruf auf der Kommandozeile kommen diese noch an den Aufruf heran, also sowas wie
java MeineHauptklasse Argument1 Argument2 Argument3 ....

Also sowas wie
java Plateau 0
wäre dann ein denkbarer Aufruf.
Bei dir ist wichtig: Die erste Zahl soll wohl die ANzahl der folgenden Zahlen angeben, also sowas wie:
java Plateau 2 1 2
Das macht aber wenig Sinn, denn du kennst ja die Größe des args Arrays über length. Daher kannst Du auf den ersten Parameter verzichten und dann einfach die Parameter auswerten.

Und rein logisch: Sobald DU mindestens 2 Zahlen angibst, dann gibst Du immer aus
Java:
System.out.println("Kein Plateau");

Das macht so natürlich vor der Analyse keinen Sinn 🙂
 
Die gute Nachricht: auf Kommandozeile funktioniert das gezeigte Programm.
Die schlechte: die Eingabe ist nicht intuitiv und ob die Ausgaben immer im Sinne des Erfinders sind, sei dahingestellt...
 

Anhänge

  • Plateau_Kommandozeile.png
    Plateau_Kommandozeile.png
    33,1 KB · Aufrufe: 44

Neue Themen


Zurück
Oben