Hallo!
Zuerst: Ich nutze IntelliJ IDEA 2020.1.1 Ultimate Edition.
Eigentlich wollte ich nur fix etwas schreiben, um damit ein Problem zu lösen. Bei dem Problem geht es um die Anzahl von Ziffernkombinationen unter bestimmten Eigenschaften. Die Details sind an der Stelle nicht relevant.
Bevor ich die Eigenschaften abfragen kann, benötige ich die n! Zahlenkombinationen, wenn ich alle n-stelligen Zahlen (jede Ziffer darf nur einmal vorkommen) als Listen innerhalb einer Menge haben möchte. Es muss nicht schön oder performant sein, sondern nur die Menge der Listen liefern.
Deshalb schrieb ich Folgendes:
Da sind jetzt ein paar println-Ausgaben drin, weil ich dachte, das Problem könne ja nicht so lang sein und so fügte ich nach und nach mehr ein.
Nun, natürlich soll es am Ende um weit höhere Zahlen gehen, aber zum Erkennen des Problems sollte der Fall c = 2 reichen.
Ich erwarte also die Ausgabe, dass set am Ende [[1,2],[2,1]] enthält.
Die Ausgabe, bestehend aus den printlns, sieht aber so aus:
Wie kann das sein, was sehe ich nicht? Danke sehr für die Hilfe!
Liebe Grüße
Xulu
Zuerst: Ich nutze IntelliJ IDEA 2020.1.1 Ultimate Edition.
Eigentlich wollte ich nur fix etwas schreiben, um damit ein Problem zu lösen. Bei dem Problem geht es um die Anzahl von Ziffernkombinationen unter bestimmten Eigenschaften. Die Details sind an der Stelle nicht relevant.
Bevor ich die Eigenschaften abfragen kann, benötige ich die n! Zahlenkombinationen, wenn ich alle n-stelligen Zahlen (jede Ziffer darf nur einmal vorkommen) als Listen innerhalb einer Menge haben möchte. Es muss nicht schön oder performant sein, sondern nur die Menge der Listen liefern.
Deshalb schrieb ich Folgendes:
Java:
import java.util.*;
public class main {
public final static int c = 2;
static HashSet<ArrayList<Integer>> set = new HashSet<ArrayList<Integer>>();
public static void main(String args[]) {
m(new ArrayList<>(), makeSet(c), c);
System.out.println("SIZE:");
System.out.println(set.size());
}
public static HashSet<Integer> makeSet(int maximum) {
HashSet<Integer> s = new HashSet<Integer>();
for (int i = 1; i <= maximum; i++) {
s.add(i);
}
return s;
}
public static void m (ArrayList<Integer> list, HashSet<Integer> s, int len) {
if (len == 0) {
System.out.println("===\nlist bei len == 0: " + list);
set.add(list);
System.out.println("set: " + set + "\n===");
}
else {
int counter = 1;
for (int u : s) {
ArrayList<Integer> l = list;
System.out.println("l Anfang for: " + l);
l.add(u);
HashSet<Integer> q = new HashSet<Integer>();
for (int z : s) {
if (z != u) {
q.add(z);
}
}
System.out.println("======\nLoop-Nr: " + counter);
System.out.println("l = " + l);
System.out.println("q = " + q);
System.out.println("======\n");
counter++;
m(l, q, len-1);
}
}
}
Da sind jetzt ein paar println-Ausgaben drin, weil ich dachte, das Problem könne ja nicht so lang sein und so fügte ich nach und nach mehr ein.
Nun, natürlich soll es am Ende um weit höhere Zahlen gehen, aber zum Erkennen des Problems sollte der Fall c = 2 reichen.
Ich erwarte also die Ausgabe, dass set am Ende [[1,2],[2,1]] enthält.
Die Ausgabe, bestehend aus den printlns, sieht aber so aus:
Code:
l Anfang for: []
======
Loop-Nr: 1
l = [1]
q = [2]
======
l Anfang for: [1]
======
Loop-Nr: 1
l = [1, 2]
q = []
======
===
list bei len == 0: [1, 2]
set: [[1, 2]]
===
l Anfang for: [1, 2]
======
Loop-Nr: 2
l = [1, 2, 2]
q = [1]
======
l Anfang for: [1, 2, 2]
======
Loop-Nr: 1
l = [1, 2, 2, 1]
q = []
======
===
list bei len == 0: [1, 2, 2, 1]
set: [[1, 2, 2, 1], [1, 2, 2, 1]]
===
SIZE:
2
Wie kann das sein, was sehe ich nicht? Danke sehr für die Hilfe!
Liebe Grüße
Xulu