# Index out of Bounds, wieso ?



## RobTop (9. Mai 2021)

Hey ich bin an einer Aufgabe dran, bei der ich eine Liste mit boolean Elementen überprüfen soll und die indizes der True Elemente in eine neue liste machen soll.
Leider kommt immer eine Fehler meldung und ich weiß nicht wieso :')
Falls mir hier einer helfen könnte wäre das mega lieb 
Gruß 
RobTop
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Aufgabe1 {

    public static void main (String[] args) {

        boolean[] test = {true,false,true,false,true,false};


        System.out.println(toList(test)[0]);
    }

    public static int[] toList(boolean[] a){
        int[] ausgabe = {};

        List<Boolean> testList = new ArrayList<Boolean>();
        for(Boolean text:a) {
            testList.add(text);

        }
        List<Integer> integerListe = new ArrayList<Integer>();

        for(int i = 0; i < testList.size();i++){
            if(testList.get(i) == true) {
                integerListe.add(i);

            }
        }
        for(int k = 0; k > integerListe.size(); k++) {
            ausgabe[k] = integerListe.get(k);

        }


        return ausgabe ;

    }




}


Fehler Meldung:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
    at Aufgabe1.main(Aufgabe1.java:12)


----------



## Barista (9. Mai 2021)

RobTop hat gesagt.:


> for(int k = 0; k > integerListe.size(); k++)


Das ist sicher falsch, Du benötigst

k <  integerListe.size()

Ansonsten sollte Dir die Zeilennummer 12 weiterhelfen.

Code solltest Du in Code-Tags posten.


----------



## RobTop (9. Mai 2021)

ok und was muss ich tun damit der Error weg geht, was muss ich in Zeile 12 ändern dafür


----------



## Gelöschtes Mitglied 65838 (9. Mai 2021)

kannst du den Code mal mit den Code tags schicken so iser schwer lesbar


----------



## RobTop (9. Mai 2021)

```
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Aufgabe1 {
    
    public static void main (String[] args) {
        
        boolean[] test = {true,false,true,false,true,false};
        
        
        System.out.println(toList(test)[0]);
    }
    
    public static int[] toList(boolean[] a){
        int[] ausgabe = {};
        
        List<Boolean> testList = new ArrayList<Boolean>();
        for(Boolean text:a) {
            testList.add(text);
            
        }
        List<Integer> integerListe = new ArrayList<Integer>();
        
        for(int i = 0; i < testList.size();i++){
            if(testList.get(i) == true) {
                integerListe.add(i);
                
            }
        }
        for(int k = 0; k < integerListe.size(); k++) {
            ausgabe[k] = integerListe.get(k);
            
        }
        
        
        return ausgabe ;
        
    }
        
        
    

}
```


----------



## RobTop (9. Mai 2021)

tut mir leid wegen den code tags bin neu hier


----------



## kneitzel (9. Mai 2021)

Wie groß ist das Array, das du hier erzeugst?

```
int[] ausgabe = {};
```


----------



## RobTop (9. Mai 2021)

kneitzel hat gesagt.:


> Wie groß ist das Array, das du hier erzeugst?
> 
> ```
> int[] ausgabe = {};
> ```


aktuell größe 0, also eine leeres array


----------



## Gelöschtes Mitglied 65838 (9. Mai 2021)

was ist denn die Spezielle Eigenschaft von java Arrays ( tipp: es ist nicht so wie in javaScript )


----------



## kneitzel (9. Mai 2021)

Richtig, also Größe 0 bedeutet, dass da keine Elemente sind, auf die Du zugreifen kannst.

Daher kann doch die Zuweisung nicht klappen, die Du versuchst.


----------



## kneitzel (9. Mai 2021)

Also generell sollte man Variablen erst deklarieren, wenn man sie auch nutzt. Also nicht das typische Script, dass am Kopf alles deklariert.

Das Array Ausgabe brauchst Du erst ab der letzten Schleife. Dann solltest Du das auch da erst direkt davor deklarieren.
Kannst Du sagen, wie viele Elemente das Array benötigt? Wenn Du das weisst, dann kannst Du das Array ja entsprechend erstellen.


----------



## RobTop (9. Mai 2021)

```
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Aufgabe1 {
    
    public static void main (String[] args) {
        
        boolean[] test = {true,false,true,false,true,false};
        
        
        System.out.println(toList(test)[0]);
    }
    
    public static int[] toList(boolean[] a){
        
        
        List<Boolean> testList = new ArrayList<Boolean>();
        for(Boolean text:a) {
            testList.add(text);
            
        }
        List<Integer> integerListe = new ArrayList<Integer>();
        
        for(int i = 0; i < testList.size();i++){
            if(testList.get(i) == true) {
                integerListe.add(i);
                
            }   
        }
        int[] ausgabe = new int [integerListe.size()];
        
        for(int k = 0; k < integerListe.size(); k++) {
            ausgabe[k] = integerListe.get(k);
            
        }
        
        
        return ausgabe ;
        
    }
        
        
    

}
```


----------



## RobTop (9. Mai 2021)

RobTop hat gesagt.:


> ```
> import java.util.ArrayList;
> import java.util.Arrays;
> import java.util.List;
> ...


Nun kommt kein Error mehr aber die Ausgabe ist nur 0, weiß jemand von euch wo jetzt der fehler ist


----------



## kneitzel (9. Mai 2021)

Dazu müsstest Du erst einmal sagen, was Du erwartest.

Was Du in der Methode jetzt als Rückgabe hast, ist einfach ein Array, in dem alle Indices aufgeführt werden, bei denen true gesetzt war.
Davon gibst Du das erste Element aus. Und der Index vom ersten Element, das true ist, ist nun einmal 0 (Das boolean Array fängt ja mit einem true an).


----------



## RobTop (9. Mai 2021)

kneitzel hat gesagt.:


> Dazu müsstest Du erst einmal sagen, was Du erwartest.
> 
> Was Du in der Methode jetzt als Rückgabe hast, ist einfach ein Array, in dem alle Indices aufgeführt werden, bei denen true gesetzt war.
> Davon gibst Du das erste Element aus. Und der Index vom ersten Element, das true ist, ist nun einmal 0 (Das boolean Array fängt ja mit einem true an).


Ich hätte als Ausgabe gerne das Array welches die indices beinhaltet


----------



## kneitzel (9. Mai 2021)

Dann ist das hoffentlich nur eine Übung, bei dem Ihr einiges ausprobieren sollt. So eine Funktionalität muss man nicht so schreiben.

Erster Punkt, der evtl. wichtig ist: if (whatever == true) ist etwas, das in der Regel nicht so geschrieben wird. whatever muss ja schon ein boolean sein, daher ist das == true einfach unnötig. Da reicht ein if (whatever)

Und einige Zwischenschritte sind nicht notwendig. Du musst die Booleans nicht erst ein eine List schieben um diese dann durchgehen zu können. Du kannst ja direkt das Array durchgehen. Und die Umwandlungen sind Dinge, die das Framework natürlich auch schon bietet. Also wäre da kein eigener Code notwendig (Also z.B. das List.toArray()).



RobTop hat gesagt.:


> Ich hätte als Ausgabe gerne das Array welches die indices beinhaltet


Dann musst Du in der main() nicht nur `[0]` ausgeben sondern in einer Schleife alle Elemente (Oder man nutzt vorhandene Methoden des Frameworks wie z.B. Arrays.toString).


----------



## Gelöschtes Mitglied 65838 (9. Mai 2021)

```
System.out.println(toList(test)[0]);
```

was macht denn diese eckige Klammer in dieser Zeile?


----------



## RobTop (9. Mai 2021)

Perfekt vielen dank, jetzt funktioniert es (y)


----------

