boolean array false - true - Abfrage

feardorcha

Mitglied
Hallo,

ich soll ein
Java:
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)
Java:
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
 
Zuletzt bearbeitet:
Unterteil dir dein Programm in kleinere Methoden.
Die Abfrage ob alle booleans true sind könnte bspw. so aussehen:

Java:
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.
 
Was ist an dieser Zeile falsch? 🙂

Java:
if (dutzend[j] = true) {

Wie vergleicht man zwei primitive Datentypen in Java?
 
Zuletzt bearbeitet:
@diggaa1984: Danke!
Es scheint so nun in Ordnung zu sein, aber ich bekomme dann folgende Fehlermeldung:
Code:
Invalid memory access of location 0x0 rip=0x101392585
:/
 
Die Fehlermeldung ist nicht mehr reproduzierbar, aber ich bekomme keine Ausgabe.
Das Programm scheint nicht zu stoppen.

Java:
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);
	}
}
 
da kanns nur einen Grund für geben:
Java:
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 🙂
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben