Index out of Bounds, wieso ?

RobTop

Mitglied
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)
 

RobTop

Mitglied
Java:
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 ;
        
    }
        
        
    

}
 
G

Gelöschtes Mitglied 65838

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

kneitzel

Gast
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.
 
K

kneitzel

Gast
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

Mitglied
Java:
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

Mitglied
Java:
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 ;
       
    }
       
       
   

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

kneitzel

Gast
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

Mitglied
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 :)
 
K

kneitzel

Gast
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()).

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).
 
G

Gelöschtes Mitglied 65838

Gast
Java:
System.out.println(toList(test)[0]);

was macht denn diese eckige Klammer in dieser Zeile?
 

Neue Themen


Oben