ArrayOutOfBoundException in main-Methode

scratchy1

Bekanntes Mitglied
Hallo Leute,
Ich hab mal ne kurze Frage: Ich bekomme eine ArrayOutOfBoundException bei
Java:
 public static void main(String[] args) {
        String artName = args[0];
...

Kann mir jemand erklären, wie das Zustande kommt? Ich will den Namen einer Tierart einlesen.
 

ocsme

Top Contributor
Hallo,

es ist wie flopalko sagt wenn du eine Klasse schreibst:
Code:
public class Test {
    public static void main(String[] args) {
        
        String tmp = args[0];
        
        
    }
}

steht das args String-Array für die Parameter beim Programm Aufruf.
Das Programm sollte also so aufgerufen werden damit etwas in tmp steht:
java Test HalloWelt
Somit würde in der tmp Variable HalloWelt stehen :)

andernfalls wäre der Fehler mit so wenig code nicht wirklich zu erklären!

LG
 

scratchy1

Bekanntes Mitglied
Hallo Leute,
ok, ich geb mal hier meinen code an:
Java:
public class AnimalInformationSystem{
    /*
     * Diese Methode liefert Informationen über die Eigenschaften eines Tiers. Dazu
     * muss der Name der Tier-Art als erster Parameter der Methode übergeben werden.
     */
    public static void main(String[] args) {
        String artName = args[0];
        Tier tier = null;
        if (artName.equals("Pinguin")) {
            tier = new Pinguin();
        }
        if (artName.equals("Löwe")) {
            tier = new Loewe();
        }
        if (artName.equals("Schmetterling")) {
            tier = new Schmetterling();
        }
        /* ... */
        if (tier == null) {
            System.out.println("Das Tier " + artName + " wurde noch nicht implementiert.");
        } else {
            System.out.println(artName + ":");
            tier.druckeEigenschaften();
        }
    }
}
 

Maliko

Bekanntes Mitglied
Der Code ist so schon richtig, sofern du dann auch einen Parameter beim Aufruf des Programmes gibst. Das muss z.B. so aussehen:

Code:
java AnimalInformationSystem Pinguin

Ansonsten bekommst du natürlich eine ArrayOutOfBoundsException, weil du versuchst den Index 0 zu verwenden, welcher aber gar nicht existiert.
 

ocsme

Top Contributor
/* * Diese Methode liefert Informationen über die Eigenschaften eines Tiers. Dazu * muss der Name der Tier-Art als erster Parameter der Methode übergeben werden. */

Schreib das ganze doch einfach als Methode dann hast du das Problem nicht mehr :)
Das ganze könnte dann so aussehen:

Code:
public class AnimalInformationSystem{

    public static void do(String tier) {
     String artName = tier;
        Tier tier = null;
        if (artName.equals("Pinguin")) {
            tier = new Pinguin();
        }
        if (artName.equals("Löwe")) {
            tier = new Loewe();
        }
        if (artName.equals("Schmetterling")) {
            tier = new Schmetterling();
        }
        /* ... */
        if (tier == null) {
            System.out.println("Das Tier " + artName + " wurde noch nicht implementiert.");
        } else {
            System.out.println(artName + ":");
            tier.druckeEigenschaften();
        }
    }

    public static void main(String[] args) {
       String s1 = "Löwe";
       do(s1);
    }
}
 

scratchy1

Bekanntes Mitglied
Ah, vielen Dank, ich habs jetzt als Methode gemacht. Hier ist meine Klasse Tier. Ich werd später mal ein paar Tierklassen schreiben, ein paar Tiere erzeugen und ausprobieren, ob meine Druckmethode bei den Exemplaren funktioniert:
Java:
abstract class Tier {
    private String artName;

    Tier(String artName) {
        this.artName = artName;
    }

    public void druckeEigenschaften() {
        int beinanzahl = 0;
        boolean gefahrfuermensch = true;
        System.out.println("" + artName);
        System.out.println("" + beinanzahl);
        System.out.println("" + gefahrfuermensch);
    }
}
 

scratchy1

Bekanntes Mitglied
Ach da fällt mir ein ich seh 2 Möglichkeiten:
1. ich überschreib in den einzelnen Tierunterklassen die Druckmethode
2. ich gebe dem Superkonstruktor die Parameter beinanzahl und gefahrfürmensch mit
 

scratchy1

Bekanntes Mitglied
Sö Leute,
Ich musste meine abstrakte Tierklasse etwas ergänzen. Dazu mal ne Unterklasse Loewe:
Java:
abstract class Tier {
    private String artName;

    Tier(String artName) {
        this.artName = artName;

    }

    abstract public int beinanzahl();

    abstract public boolean gefahrfuermensch();

    public void druckeEigenschaften() {

        System.out.println("" + artName);
        if (artName.equals("Loewe")) {
            System.out.println("" + this.beinanzahl());
            System.out.println("" + this.gefahrfuermensch());
        } else {

        }

    }
}
Java:
public class Loewe extends Tier{
    Loewe(){
        super("Loewe");
    }
    public int beinanzahl(){
        return 4;
    }
    public boolean gefahrfuermensch(){
        return true;
    }
}
 

scratchy1

Bekanntes Mitglied
Achso, ich glaube ich verstehe, was Du meinst, aber die Loewen haben doch z.b. andere Eigenschaften als Pinguine.(Gefahr für Mensch oder Anzahl Beine)
 
Zuletzt bearbeitet:

temi

Top Contributor
Achso, ich glaube ich verstehe, was Du meinst, aber die Loewen haben doch z.b. andere Eigenschaften als Pinguine.(Gefahr für Mensch oder Anzahl Beine)

Sie haben keine anderen Eigenschaften, sondern nur die Werte der Eigenschaften sind unterschiedlich.

Dafür brauchst du keine extra Klasse, dass könntest du z.B. über weitere Konstruktorparameter lösen.
 

scratchy1

Bekanntes Mitglied
Hallo temi,
ok, aber eigentlich ist doch Tier eine abstrakte Klasse und ich kann in ihr auf Verhalten zurückgreifen, welches
erst in Subklassen implementiert wird. Indem abstrakte Methoden deklariert werden,
kann eine Superklasse auf Verhalten zugreifen, welches in Abhängigkeit von der konkreten
Subklasse unterschiedlich implementiert sein kann. D.h. ich kann keine Instanzen von Tier erzeugen, aber für meinen Fall geht das doch in Ordnung, da ich nur Instanzen von konkreten Tieren brauche.
 

mrBrown

Super-Moderator
Mitarbeiter
Erweitern (=erben von) der Superklasse ist sinnvoll, wenn du das verhalten der Superklasse änderst. In deinem Fall änderst du aber kein verhalten - wenn du der Superklasse zwei Parameter gibst, beinzahl und gefahrFürMensch, hast du identisches Verhalten ohne Unterklassen.

Und zusätzlich kennt in deinem Fall die Superklasse sogar noch die Unterklassen, in druckeEigenschaften ;)
 

scratchy1

Bekanntes Mitglied
Hallo mrBrown,
Du hast Recht, man muss das nicht so machen wie ich. Ich schreib mal einen kleinen Text und er passt vielleicht in diesem Fall nicht genau, aber wenigstens verursacht dieses Vorgehen hier keine Fehler:
Ute ist klar, dass sie jede Art von Tieren als einen eigenen Typ realisieren möchte. Ihr Programm
nimmt den String-Parameter entgegen und ruft einen entsprechenden Konstruktor auf.
Eine Methode druckeEigenschaften() innerhalb von Tier einer Superklasse aller Tier-Klassen
soll die verschiedenen Eigenschaften des jeweiligen Tiers auf der Konsole ausgeben.
Folgendes hat Ute bereits implementiert:
public class AnimalInformationSystem (siehe oben).
Bei der Erstellung der Klasse Tier ist Ute allerdings ratlos. Die Methode druckeEigenschaften()
gehört ganz klar in Tier, schließlich soll jedes Tier Aussagen über seine Eigenschaften machen
können. Umgekehrt kann aber Tier die Eigenschaften gar nicht kennen (hier hakt es natürlich, weil nur die Werte nicht bekannt sind, aber 1.sind die Methoden hier abstrakt und 2. liessen sich in den Unterklassen völlig unterschiedliche Methoden/Eigenschaften implementieren), schließlich sind sie ja unterschiedlich, je nachdem, was für ein Tier sich hinter dem Tier wirklich verbirgt.

Erklären Sie, welches komfortable Konstrukt in Java erlaubt, Utes Probleme zu lösen.
Vergessen Sie aber nicht zu erwähnen, was für Einschränkungen sich daraus ergeben auch
wenn sie in Utes Programm nicht zutage treten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M [JTable] getValue throws ArrayOutOfBoundException Java Basics - Anfänger-Themen 1
S ArrayOutOfBoundException Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
N Throw an Main Methode übergeben Java Basics - Anfänger-Themen 7
J Die statische Main-Methode ändert Instanzvariable? Java Basics - Anfänger-Themen 10
I Jetty starten von Programm (Main) Java Basics - Anfänger-Themen 27
Denix The public type Main must be defined in its own fileJava(16777541) Java Basics - Anfänger-Themen 13
D Array in Main Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 3
G jButton führt Main Methode nicht richtig aus Java Basics - Anfänger-Themen 3
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
S Array über ein Ausgabemethode in main ausgeben Java Basics - Anfänger-Themen 31
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
N Wozu nutzt man in der Main Methode das args Array? Java Basics - Anfänger-Themen 10
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
H Warum kann man keine Parameter in die main-Methode packen? Java Basics - Anfänger-Themen 4
J In main() Datei geöffnet, von anderer Funktion beschreiben Java Basics - Anfänger-Themen 3
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
KogoroMori21 Methode in der main ausgeben Java Basics - Anfänger-Themen 2
s_1895 zu viele Zeilen in der Main Methode Java Basics - Anfänger-Themen 4
C Methodenrückgabe wird in der main nicht berücksichtigt Java Basics - Anfänger-Themen 2
B Wie kann ich etwas vor der Main-Methode ausführen? Java Basics - Anfänger-Themen 21
K Übergabe des Wertes einer Variable aus main() in eine Klassenmethode Java Basics - Anfänger-Themen 8
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
T Main startet nicht bei vorgegebenen Code Java Basics - Anfänger-Themen 41
G main Methode Java Basics - Anfänger-Themen 5
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
1 main-Methode erweitern, Nachfrage nach wiedeholung Java Basics - Anfänger-Themen 2
J main methode Java Basics - Anfänger-Themen 1
B No Main Classes Found Java Basics - Anfänger-Themen 7
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
E Was kommt in ein Objekt und was in die Main Methode? Java Basics - Anfänger-Themen 8
D java main methode kann nicht kompiliert werden (Erstellen eines Objekts) Java Basics - Anfänger-Themen 6
M String außerhalb der main-Methode Java Basics - Anfänger-Themen 4
B File öffnen in src/main/webapp Java Basics - Anfänger-Themen 4
P Parameterübergabe, von Methode zu Methode zu main Java Basics - Anfänger-Themen 4
J Kapselung Array in Set ändern und in Main ausgeben lassen Java Basics - Anfänger-Themen 4
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
V Collections Objekte einer ArrayList in der main() ausgeben Java Basics - Anfänger-Themen 9
D Compiler-Fehler Aufrufen einer Methode von Main Java Basics - Anfänger-Themen 4
G Was als main Method Java Basics - Anfänger-Themen 6
M Methode mit Array als Parameter an Main übergeben Java Basics - Anfänger-Themen 1
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
J Timer bauen, Main Methode immer wieder neu starten Java Basics - Anfänger-Themen 13
J Compiler-Fehler Java findet main Klasse nicht Java Basics - Anfänger-Themen 16
B Parameterübergabe in main Java Basics - Anfänger-Themen 1
A Variablen Main Klasse soll auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 3
I java.lang.ArrayIndexOutOfBoundsException at lösung.main Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
J Parameter in main verwenden Java Basics - Anfänger-Themen 3
M Methodenaufruf in der Main Datei funzt nicht Java Basics - Anfänger-Themen 13
M Maven Main-Methode Interface und Klasse Java Basics - Anfänger-Themen 2
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
G Instanzvariable in main-Methode verboten? Java Basics - Anfänger-Themen 3
M Objekt starten von der main-Methode Java Basics - Anfänger-Themen 1
S Fehler: Editor does not contain a main type Java Basics - Anfänger-Themen 3
G Programm wird nicht ausgeführt: Editor does not contain a main type Java Basics - Anfänger-Themen 10
A Methode aufrufen in main-Methode Java Basics - Anfänger-Themen 5
B Linux - Error: Could not find or load main class application.Main Java Basics - Anfänger-Themen 28
C Erste Schritte (Netbeans) no main classes found Java Basics - Anfänger-Themen 5
U Klassen IntelliJ14.1.1 Ultimate startet eine Main-Klasse NICHT MEHR Java Basics - Anfänger-Themen 0
P Methoden private int[] in main Java Basics - Anfänger-Themen 16
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
AssELAss Klassen Java Klasse in main-methode ausführen Java Basics - Anfänger-Themen 7
R Methoden Nicht statische Methode aus Main aufrufen Java Basics - Anfänger-Themen 2
P could not find main class obwohl da Java Basics - Anfänger-Themen 17
J Methode in main-Methode aufrufen Java Basics - Anfänger-Themen 5
B OOP Wie benutze ich die Main Funktion richtig? Java Basics - Anfänger-Themen 10
M Klassen Main Methode in einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 13
TheMenox Methoden Auslagerung von Code aus der "main" Methode sinnvoll? Java Basics - Anfänger-Themen 70
quecksilver if-Abfrage in main ausführen Java Basics - Anfänger-Themen 4
J Exception in thread "main" Java Basics - Anfänger-Themen 1
S Methode auf Main zugreifen Java Basics - Anfänger-Themen 5
D String aus Main in Klasse übergeben Java Basics - Anfänger-Themen 4
S Methoden main-Methode integrieren Java Basics - Anfänger-Themen 2
K Methoden Programm ohne Main Methode starten Java Basics - Anfänger-Themen 2
I Fehlermeldung: Java does not contain a main type Java Basics - Anfänger-Themen 1
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
F Erste Schritte (Gelöst) Anfängerfrage Arraylist ausserhalb der Main Methode Java Basics - Anfänger-Themen 2
N Variablen Variable in Main deklarieren und in anderer Methode nutzen Java Basics - Anfänger-Themen 12
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
R window-Klasse, main-loop und unausschaltbares anti-aliasing Java Basics - Anfänger-Themen 0
T Mehrere Methoden in der main-Methode verknüpfen und aufeinander anwenden Java Basics - Anfänger-Themen 2
P Compiler-Fehler Could not load or find main class fehler Java Basics - Anfänger-Themen 15
S Selection does not contain a main type! Java Basics - Anfänger-Themen 5
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
P Compiler-Fehler could not find or load main class Java Basics - Anfänger-Themen 5
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
U Umschreiben ohne main methode ;-) Java Basics - Anfänger-Themen 8
A Fehlermeldung beim aufruf der main Methode Java Basics - Anfänger-Themen 17
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
F Implementierung von Interfaces -> Problem mit main Java Basics - Anfänger-Themen 12
F Threads Variable aus einem Thread in main Methode? Java Basics - Anfänger-Themen 9
K Exception in thread "main" Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben