Warum sollte es auch eine eindeutige Antwort auf etwas geben, das sich auf unterschiedliche Weise erledigen lässt? Such Dir einfach was aus.keine eindeutige Antwort im Post enthalten.
i := 0
so lange i < n
e := wähle zufällig ein Element aus dem Array
falls e false ist, setze e im Array auf true und erhöhe i um 1
ende
int index = (int)(Math.random() * array.length);
Das Thema taucht z. Z. öfter auf: https://www.java-forum.org/thema/math-random-mit-boolean-array.183152/#post-1167045
static boolean[] misch1(boolean[] b) {
AtomicInteger ai = new AtomicInteger();
IntStream.range(0, b.length).mapToObj((value) -> b[value]).sorted((o1, o2) -> (int) (Math.random() * 3.0) - 1).forEach((t) -> b[ai.getAndIncrement()] = t);
return b;
}
static boolean[] misch2(boolean[] b) {
IntStream.range(0, b.length).forEach((value)->{int r=(int)(Math.random()*b.length);boolean a=b[value];b[value]=b[r];b[r]=a;});
return b;
}
public static void main(String[] args) {
System.out.println(Arrays.toString(misch1(new boolean[]{true, true, true, false, false, false})));
System.out.println(Arrays.toString(misch2(new boolean[]{true, true, true, false, false, false})));
int m = 6;
int n = 3;
int o = 1000;
int[] a = new int[m];
int[] b = new int[m];
for (int i = 0; i < o; i++) {
boolean[] c = misch1(new boolean[]{true, true, true, false, false, false});
boolean[] d = misch2(new boolean[]{true, true, true, false, false, false});
IntStream.range(0,m).forEach((value)->{a[value]+=c[value]?1:0;b[value]+=d[value]?1:0;});
}
System.out.println(IntStream.of(a).mapToObj((value) -> value / (float) ( o*n/m)).map(t -> String.format("%.03f", t)).collect(Collectors.joining(", ")));
System.out.println(IntStream.of(b).mapToObj((value) -> value / (float) ( o*n/m)).map(t -> String.format("%.03f", t)).collect(Collectors.joining(", ")));
}
[true, false, true, false, true, false]
[false, true, true, false, true, false]
1,712, 1,440, 1,180, 0,852, 0,562, 0,254
1,108, 1,052, 0,932, 0,958, 0,952, 0,998
?!?leider ist das schief:
Die Methode misch1 die dasselbe tut wie in dem Beitrag in dem von Dir verlinkten Thema gibt ein nicht gleichmäßig gemischtes Array zurück.
Das bezweifle ich auch nicht aber das andere wäre ja eine Lösung einfach hinklatschen....kein Mensch implementiert das mit einem Stream
Du hattest doch das andere Thema verlinktinteressiert das doch in der Aufgabe nicht
Ah, intentional obfuscation - versteheDas bezweifle ich auch nicht aber das andere wäre ja eine Lösung einfach hinklatschen....
Ob die Verteilung schief ist oder nicht, spielt in der Aufgabe doch keine Rolle. Irgendwie zufällig - mehr wollen sie doch gar nicht.Du hattest doch das andere Thema verlinkt