dR.LoL: String Array Problem

Hi Leute,
Ich habe das hier in meinem Tooli:
String[] strFailure  = new String[] { };

Dann kommen immer Abfragen, die Werte überprüfen und Fehler in dieses Array schreiben sollen, like this:

strFailure[intFailures] = "A-Number:2short";
intFailures++;

Allerdings bekomme ich das Programm nicht hin, es stürtzt ab bei diesem Punkt.

Was ist daran Falsch?
Gruss vom LoL

PS: Ganze Fehlermeldung ist diese hier, sind für mich Java-Neuling etwas viele, teils auch sehr unverständliche, doch ich hoffe ihr könnt mir helfen, mein Problem zu lösen.

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1
 at SRETT.SRETTGUI.onClickmyRateButton(SRETTGUI.java:564)
 at SRETT.SRETTGUI$17.actionPerformed(SRETTGUI.java:239)
 at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
 at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
 at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
 at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
 at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
 at java.awt.Component.processMouseEvent(Component.java:5488)
 at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
 at java.awt.Component.processEvent(Component.java:5253)
 at java.awt.Container.processEvent(Container.java:1966)
 at java.awt.Component.dispatchEventImpl(Component.java:3955)
 at java.awt.Container.dispatchEventImpl(Container.java:2024)
 at java.awt.Component.dispatchEvent(Component.java:3803)
 at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
 at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
 at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
 at java.awt.Container.dispatchEventImpl(Container.java:2010)
 at java.awt.Window.dispatchEventImpl(Window.java:1766)
 at java.awt.Component.dispatchEvent(Component.java:3803)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
 at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

  1. moin dR.LoL :)

    Hi Leute,
    Ich habe das hier in meinem Tooli:

    Dann kommen immer Abfragen, die Werte überprüfen und Fehler in dieses Array schreiben sollen, like this:

    strFailure[intFailures] = "A-Number:2short";
    intFailures++;

    Was ist daran Falsch?

    Das sagt dir die Fehlermeldung ;)

    Im Ernst: java.lang.ArrayIndexOutOfBoundsException: 1 bedeuted, dass du auf irgendeinen Teil des Arrays zugreifen willst, der nicht existiert (in diesem Fall: der erste Eintrag des Arrays).

    Warum ist das so?

    String[] strFailure  = new String[] { };

    Hier legst du ein leeres Array an.
    Ja genau - Arrays sind nicht dynamisch. Die Größe die ihnen bei der Initialisierung zugewiesen wird, behalten sie auch. In deinem Fall hat das Array die Länge 0.

    Wenn du nun aber mit strFailure[intFailures] = "A-Number:2short"; auf die Stelle des Arrays zugreifen willst, die durch die Variable intFailures angegeben wird, schlägt das natürlich fehl.

    Als Lösung schlage ich dir zwei alternative Dinge vor:
    1. Gib deinem Array die benötigte Größe: String[] strFailure  = new String[intFailures];
    2. Nutze eine dynamische Liste wie ArrayList oder Vector oder dergleichen.

    liebe Grüße aus Berlin
    lina-

    --
    Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
    1. Hallo Lina, super erklärung der Fehlermeldung.

      Danke auch dir für deine Hilfe, Problem is nu erledigt!

      Grüsse aus Luzern! ;-))

  2. Hallo dR.LoL,

    Ich habe das hier in meinem Tooli:
    String[] strFailure  = new String[] { };

    Dann kommen immer Abfragen, die Werte überprüfen und Fehler in dieses Array schreiben sollen, like this:

    strFailure[intFailures] = "A-Number:2short";
    intFailures++;

    Allerdings bekomme ich das Programm nicht hin, es stürtzt ab bei diesem Punkt.

    Was ist daran Falsch?

    Aber klar doch dass es abstürzt. Schließlich erzeugst du hiermit ein leeres String-Array:

      
    String[] strFailure = new String[] { };   // definiert ein Array von String-Objekten  
                                              // da die Länge eines Arrays zu Beginn festgelegt werden muss,  
                                              // holt er sich die Länge deines Arrays aus deiner Initialisierung  
    System.out.println(strFailure.length);    // gibt 0 aus
    

    Wie du es richtig machen könntest:

      
    String[] strFailure = new String[] { "eins", "zwei", "drei" };  
    System.out.println(strFailure.length);    // gibt 3 aus
    

    Wenn du nun ein Array von 1000 String-Objekten anlegen willst, ohne sie gleich festzulegen, geht das so:

      
    String[] strFailure = new String[1000];  
    System.out.println(strFailure.length);    // gibt 1000 aus
    

    Du solltest dir mal das Kapitel 3.6 ("Arrays") des Buches Java ist auch eine Insel durchlesen.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html
    1. Hallo dR.LoL,

      Hallo auch ;-))

      Ich danke dir, für das coole E-Book!!! Und deine Hilfe:
      String[] strFailure  = new String[1000];
      Funktioniert perfekt!

      Gruss vom LoL