# Methode erstellen für ein Boolean Array



## virtual12 (6. Dez 2015)

Ich möchte eine Methode erstellen, die ein Array von booleschen Werten als Argument übergeben bekommt und es soll true ausgegeben werden, wenn eines der Elemente im Array true ist. Ich habe schon einiges versucht, komme aber nicht so recht weiter. Trotzdem mal mein Ansatz. Würde mich über jeden Tipp freuen!

```
private static boolean[] einwahrer(boolean[] werte) {
boolean[] einer = new boolean[0];
        if(werte[] = 0) einer = true;{
            System.out.println("true");
        } else if(werte[] = 1) {
               System.out.println("false");
        return null;
    }
```


----------



## InfectedBytes (6. Dez 2015)

du hast unmengen an syntaxfehlern in deinem code! Und auch rein logisch sind da viele ungereimtheiten drin.
Ich empfehle dir dringend ein Anfängerbuch für die Grundlagen: http://openbook.rheinwerk-verlag.de/javainsel/

Um zu prüfen ob ein Wert true ist, musst du mit einer Schleife alle Einträge im Array durchlaufen und sobald ein Wert true ist, gibst du true zurück (oder machst ein println, was aber nicht so schöner stil ist).
Um dann true auszugeben wäre folgendes gut: System.out.println(einwahrer(arr));


----------



## virtual12 (6. Dez 2015)

Danke für deine Antwort. Ich glaube, mein Problem ist auch, dass ich nicht recht weiß, wie ich ein Boolean Array einlese, das nur die Werte true und False enthält. Hast du da noch einen Tipp für mich?


----------



## strußi (6. Dez 2015)

```
boolean[] wahrheit =new boolean[ anzahlFelder];
//zuweisung
for( int i =0; i <wahrheit.length; i++){
  wahrheit[ i] =//zufallswerte oder andere Quelle (true oder false)
}
//suchen/ausgeben
for( boolean wahr :wahrheit){
  if( wahr){
    System.out.println( wahr);
    return wahr;
  }
}
```


----------



## virtual12 (6. Dez 2015)

Danke. Werde es gleich mal versuchen.


----------



## virtual12 (6. Dez 2015)

Komme doch noch nicht ganz klar. Habe jetzt folgendes

```
public class Wahrheit{
  public static void main(String[] args) {
boolean[] werte = {true, false};
        boolean[] n = all(werte);
        System.out.println(n);
    }

   

    private static boolean[] all(boolean[] werte) {
        boolean b = StdIn.readBoolean();
        boolean[] alle = new boolean[1];
        for(int i = 0; i < alle.length; i++)
            alle[i] = b;
        for(boolean wahr: alle)
            if(wahr){
                System.out.println(wahr);
       
        return null;
    }
        return true;
    }
}
```

Ich möchte true zurückbekommen und nicht null. Wenn ich aber als return true schreibe, schreibt der Compiler Type mismatch


----------



## InfectedBytes (6. Dez 2015)

weil du halt sinnloserweise ein boolean Array als rückgabewert angegeben hast.
Als Rückgabetyp solltest du logischerweise auch nur boolean angeben


----------



## virtual12 (6. Dez 2015)

Danke! Jetzt macht die Methode aber noch nicht ganz was ich will. Es soll nur true ausgegeben werden, wenn mindestens ein Element true ist. Wenn alle Elemente false sind, soll auch false ausgegeben werden. Habe mir folgendes gedacht

```
public class Wahrheit {
  public static void main(String[] args) {
    boolean[] werte = {true, false};
        boolean n = all(werte);
        System.out.println(n);
    }

   

    private static boolean all(boolean[] werte) {
        boolean b = StdIn.readBoolean();
        boolean[] alle = new boolean[0];
        for(int i = 0; i < alle.length; i++)
            alle[i] = b;
        for(boolean wahr: alle)
            if(wahr){
                System.out.println(wahr);   
   
        return true;
        for(int j = 0; j < alle .length;j++)
            alle[j] = b;
        if(!wahr){
            System.out.println(!wahr);
        }
       
    return false;
}
}
}
```

Der Compiler schreibt jetzt aber Unreachable code. Was mache ich falsch?


----------



## InfectedBytes (6. Dez 2015)

rücke einfach mal deinen Code ordentlich ein, dann siehst du vermutlich direkt den Fehler (Klammerung).
Falls du Eclipse nutzt, kannst du mit Strg+Shift+F den Code automatisch einrücken lassen


----------



## virtual12 (6. Dez 2015)

eclipse benutze ich nicht. Habe mal ein bisschen was versucht, komme aber nicht so recht weiter. Zwischenzeitlich sagte der Compiler, dass "wahr" nicht deklariert wäre, was ich dann noch einmal getan habe. Klappt aber trotzdem noch nicht.

```
public class Wahrheit {
    public static void main(String[] args) {
        // Sie duerfen hier fuer Ihre eigenen Zwecke eine Ausgabe programmieren.
        // Dies ist aber kein Bestandteil der Aufgabe.
        boolean[] werte = {true, false};
        boolean n = all(werte);
        System.out.println(n);
    }

   

    private static boolean all(boolean[] werte) {
        boolean b = StdIn.readBoolean();
        boolean[] alle = new boolean[0];
        for(int i = 0; i < alle.length; i++)
            alle[i] = b;
                for(boolean wahr: alle)
                    if(wahr){
                        System.out.println(wahr);   
            }
        return true;
       
       
        for(int j = 0; j < alle .length;j++){
            alle[j] = b;
                for(boolean wahr: alle){
                    if(!wahr){
                        System.out.println(!wahr);{
                   
       
                return false;

        }
    }
}
}
}
```


----------



## InfectedBytes (6. Dez 2015)

habe deinen code mal eingerückt, vielleicht siehst du jetzt die ganzen falschen Klammerungen:

```
public class Wahrheit {
    public static void main(String[] args) {
        // Sie duerfen hier fuer Ihre eigenen Zwecke eine Ausgabe programmieren.
        // Dies ist aber kein Bestandteil der Aufgabe.
        boolean[] werte = {true, false};
        boolean n = all(werte);
        System.out.println(n);
    }

    private static boolean all(boolean[] werte) {
        boolean b = StdIn.readBoolean();
        boolean[] alle = new boolean[0];
        for(int i = 0; i < alle.length; i++)
            alle[i] = b;
        for(boolean wahr : alle)
            if(wahr){
                System.out.println(wahr); 
            }
        return true; // alles was hier nach kommt ist unerreichbar


        for(int j = 0; j < alle .length;j++){
            alle[j] = b;
            for(boolean wahr: alle){
                if(!wahr){
                    System.out.println(!wahr);{
                        return false;
                    }
                }
            }
        }
    }
}
```


----------



## virtual12 (6. Dez 2015)

Hätte es jetzt so gemacht, habe aber scheinbar irgendwo was vergessen, nur wo?

```
public class Wahrheit {
    public static void main(String[] args) {
        boolean[] werte = {true, false};
        boolean n = all(werte);
        System.out.println(n);
    }

    private static boolean all(boolean[] werte) {
        boolean b = StdIn.readBoolean();
        boolean[] alle = new boolean[0];
        for(int i = 0; i < alle.length; i++)
            alle[i] = b;
        for(boolean wahr : alle)
            if(wahr)
                System.out.println(wahr);
           
        return true; // alles was hier nach kommt ist unerreichbar


        for(int j = 0; j < alle .length;j++)
            alle[j] = b;
            for(boolean wahr: alle)
                if(!wahr)
                    System.out.println(!wahr);
                        return false;
                   
    }
}
```


----------



## InfectedBytes (6. Dez 2015)

wie gesagt, durch dein *return true* an der stelle, wird die methode sofort verlassen, sodass alles was danach kommt nicht mehr ausgeführt wird.
und auch sonst ist dein Code ziemlich unnötig kompliziert und teilweise auch falsch.
Um das ganze mal abzukürzen, hier mal eine mögliche Lösung.

```
private static boolean containsTrue(boolean[] data) {
  for(boolean b : data)
    if(b) return true;

  return false;
}
```
sobald true in dem array gefunden wird, wird true zurückgegeben.
das return false wird also nur ausgeführt, wenn in dem Array kein true vorkommt. => also wenn alles false ist


----------



## virtual12 (6. Dez 2015)

Vielen Dank für deine Hilfe! Werde wohl noch viel üben müssen.


----------

