IndexOutOfBounds

Herr.Blacky

Mitglied
Guten Tag :)

Ich bekomme immer eine IndexOutOfBoundsException geworfen. Ich weiß, wo sich der Fehler befindet und was dieser bedeutet. Theoretisch, bekomme ihn leider nicht behoben.

Console:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
8 :Index 0
22 :Index 1

at Model.spilt(Model.java:60)


Mir ist klar, dass der Index 1, bei einen Arraylänge von 1 nicht vorhanden ist, aber warum speichert er den Integer dann. Der ankommende String besteht immer aus : Zahl + Zahl.

Die Methode macht auch was sie soll, außer der Exception :).

Java:
public void spilt ()
    {
        
        
        
                     String replaceString = arriveString.replace("+", "p");
                     String [] splitPlus = replaceString.split("p");
                    
                     try {
                    
                        zahl1 = Integer.parseInt(splitPlus[0]);
                         zahl2 = Integer.parseInt(splitPlus[1]);
                    
                    
                       System.out.println(zahl1  + " :Index 0");
                       System.out.println(zahl2  + " :Index 1");
                         }
                    
                     catch(java.lang.IndexOutOfBoundsException e){
                          e.printStackTrace();
                    }     










public vlass ControllerGUI {
    
    ...

class LabelListenerGleich implements MouseListener

        {

            @Override
            public void mouseClicked(MouseEvent e) {
                
                model.setArrive(viewGui.getText().trim());
                model.printArriveString();
                model.spilt();
                model.addieren();
                viewGui.delete();
                viewGui.setText(model.getSumme());
                
            
            }
 
G

Gelöschtes Mitglied 65838

Gast
lass dir halt das ausgeben was drin steht.. was du splittest und dann wirst du irgendwo sehen dass es irgendwo nicht funktioniert... dafür brauchst du keinen berater... system.out.println ist das meist genutzte debug tool.. also nimms her
 

temi

Top Contributor
Die Methode macht auch was sie soll, außer der Exception
Offenbar nicht, denn ab und zu scheint das Array "splitPlus" ja nur ein Element zu enthalten (ich nehme an, dass die Methode oft und mit wechselnden Daten aufgerufen wird). Vielleicht enthält "arriveString" doch ab und zu nicht erwartete Werte?

Du kannst natürlich vorher auch prüfen, ob das gesplittete Array auch zwei Elemente enthält, bevor du darauf zugreifst. Hängt vom Anwendungsfall ab, ob das Ergebnis dann noch korrekt ist, wenn Werte ausgelassen werden.
 

Oneixee5

Top Contributor
Wenn du nicht genau weißt was ein Nutzer eingibt, dann solltest du nicht starr irgendwelche Indizes von Arrays benutzen, sondern mit der Auswertung so dynamisch wie möglich vorgehen.
Java:
    public static class MyValidationException extends Exception {

        public MyValidationException(final String message) {
            super(message);
        }

    }

    private static final Pattern VALIDATION_PATTERN = Pattern.compile("[0-9\\+ ]+");

    public static void main(final String[] args) {
        try {
            System.out.println(sum(parse(validate("1+2"))));
            System.out.println(sum(parse(validate("1+2+3"))));
            System.out.println(sum(parse(validate("1 + 2 + 3"))));
            System.out.println(sum(parse(validate("1 + 2 + x"))));
            System.out.println(sum(parse(validate(""))));
        } catch (final MyValidationException e) {
            // handle illegal input
            e.printStackTrace();
        }
    }

    private static String validate(final String arriveString) throws MyValidationException {
        if (Objects.isNull(arriveString) || arriveString.isBlank()
                || !VALIDATION_PATTERN.matcher(arriveString).matches()) {
            throw new MyValidationException("illegal input: " + arriveString);
        }
        return arriveString;
    }

    private static String[] parse(final String arriveString) {
        return arriveString.split("\\+");
    }

    private static int sum(final String[] splitPlus) {
        return Arrays.stream(splitPlus)
                .map(s -> Integer.valueOf(s.trim()))
                .reduce(0, Integer::sum);
    }
 
Zuletzt bearbeitet:

Herr.Blacky

Mitglied
Danke! Habe das Ausgangsproblem schon gelöst. Programmiere ein Taschenrechner der einfache Funktionen differenzieren kann. Ja, ich weiß, gibt schon Methoden usw dafür. :)
Habe mehere Ansätze schon, natürlich, kleinere Probleme gibt es noch zu lösen. Grundproblem ist halt, den String des Users auszuwerten, mit den ganzen Gesetzen wie das Assoziativgesetz usw, aber das macht ja gerade Spaß.
 

Ähnliche Java Themen


Oben