# boolean array false - true - Abfrage



## feardorcha (14. Mai 2012)

Hallo,

ich soll ein 
	
	
	
	





```
boolean[]
```
 erstellen, dessen Werte alle zunächst auf false gestellt werden.
Nach und nach werden die Werte zufällig auf true gesetzt.
Wie frage ich am besten ab, ob irgendwann alle Werte true sind?

Hier mein Versuch: (in Kurzform)

```
import java.util.Random;

public class Zufall {
	public static void main (String[] args) {
		
		int n = 12;
		int l=0, m=0;
		Random random =new Random(0);
		
		boolean[] dutzend = new boolean[n];
		
		for (int i=0; i<dutzend.length; i++) {
			dutzend[i] = false;
		}
		
		while (l<12){
			int k = (int) random.nextDouble() *11;
			dutzend[k] = true;
			for (int j=0; j<dutzend.length; j++) {
				if (dutzend[j] = true) {
					l+=1;
				}
			}
			if(l<12){
				l=0;
			}
			
			m++;
		}
		System.out.print(m);
	}
}
```

Leider wird die while-Schleife bei mir nur einmal durchlaufen.
Ich verstehe nicht so recht, warum...
Mein Ansatz war, dass ich in der verschachtelten for-Schleife aufsummiere, wieviele trues in meinem Array stecken und, wenn es nicht alle sind, wird der Zähler wieder auf 0 gestellt und die while-Schleife wird erneut gestartet.

Der Zähler m soll mir am Schluss ausgeben, wieviele Schleifendurchgänge ich brauche, um das Array durch Zufall komplett mit true-Werten zu füllen.

Vielen Dank & LG,
fear


----------



## Gast2 (14. Mai 2012)

Unterteil dir dein Programm in kleinere Methoden.
Die Abfrage ob alle booleans true sind könnte bspw. so aussehen:


```
private static boolean allBooleansAreTrue (boolean[] array) {
  for (boolean bool : array) {
    if (!bool) return false;
  }
  return true;
}
```

PS:
Das false setzen am Anfang kannst du dir sparen, wenn du ein boolean array erstellst sind alle Werte per default erstmal false.


----------



## Final_Striker (14. Mai 2012)

Was ist an dieser Zeile falsch? 


```
if (dutzend[j] = true) {
```

Wie vergleicht man zwei primitive Datentypen in Java?


----------



## feardorcha (14. Mai 2012)

@EikeB: Wie binde ich dann diese Methode in meine While-Schleife ein?  *dummfrag*


----------



## diggaa1984 (14. Mai 2012)

feardorcha hat gesagt.:


> @EikeB: Wie binde ich dann diese Methode in meine While-Schleife ein?  *dummfrag*




```
while (! allBooleansAreTrue(dutzend)) {
    //mach was :)
}
```


----------



## feardorcha (14. Mai 2012)

@diggaa1984: Danke!
Es scheint so nun in Ordnung zu sein, aber ich bekomme dann folgende Fehlermeldung:
	
	
	
	





```
Invalid memory access of location 0x0 rip=0x101392585
```
 :/


----------



## diggaa1984 (14. Mai 2012)

zeig nochmal den code pls .. aber ne invalid memory access, alle achtung


----------



## feardorcha (14. Mai 2012)

Die Fehlermeldung ist nicht mehr reproduzierbar, aber ich bekomme keine Ausgabe.
Das Programm scheint nicht zu stoppen.


```
import java.util.Random;


public class Zufall {
	
	private static boolean allBooleansAreTrue (boolean[] dutzend) {
		  for (boolean bool : dutzend) {
		    if (!bool) return false;
		  }
		  return true;
		}
	
	public static void main (String[] args) {
		
		int n = 12;
		int m=0;
		Random random =new Random(0);
		
		boolean[] dutzend = new boolean[n];
		
		for (int i=0; i<dutzend.length; i++) {
			dutzend[i] = false;
		}
		
		while (! allBooleansAreTrue(dutzend)){
			int k = (int) random.nextDouble() *11;
			dutzend[k] = true;
			
			m++;
		}
		
		System.out.print(m);
	}
}
```


----------



## diggaa1984 (14. Mai 2012)

da kanns nur einen Grund für geben:

```
int k = (int) random.nextDouble() *11;
```

Probier es doch erstmal mit nextInt, wenn das geht kannst du gern andere Varianten probieren. Dann weisst du ja, dass der Rest in Ordnung ist.

Mit der obigen Formel wird erst alles ab 0,954545.. in etwa auf letztendlich 11 umgerechnet .. Da du hier nextDouble verwendest, kannst bestimmt ne Nacht drüber schlafen bis hier zB. mal die 11 als Endergebnis erzielt wird, oder irgendeine andere Zahl, die zum Abschluss fehlt


----------



## feardorcha (14. Mai 2012)

Super, DAS war's!!! :toll: DANKE!!!


----------



## diggaa1984 (14. Mai 2012)

Aber auch mit nextInt kanns THEORETISCH ne halbe Ewigkeit dauern, is eben Zufall.


----------

