Hallo zusammen,
meine Aufgabe ist es, eine Klasse Set zu implementieren, die Mengen von Zahlen zwischen 0 und 31 verwaltet. Dazu soll als Datenstruktur ne int-Zahl benutzt werden, die als Bitfolge interpretiert wird. Die Zahl 44 kann z.B. als Menge (2, 3, 5) aufgefasst werden. Es sollen Operationen zum Einfügen und Entfernen von Elementen sowie zum Vereinigen von Mengen und zur Berechnung der Schnittmenge zweier Mengen.
Hier der Code der Musterlösung:
Ich tue mich super schwer damit, das zu verstehen..
1.
Was passiert da mit den Shift-Operatoren?
2.
Hier bin ich völlig raus. Alleine die Methode contains() lässt mich nur mit Fragezeichen zurück.
Könnt ihr mir da erklären, was da im Programm passiert?
Besten Dank!
meine Aufgabe ist es, eine Klasse Set zu implementieren, die Mengen von Zahlen zwischen 0 und 31 verwaltet. Dazu soll als Datenstruktur ne int-Zahl benutzt werden, die als Bitfolge interpretiert wird. Die Zahl 44 kann z.B. als Menge (2, 3, 5) aufgefasst werden. Es sollen Operationen zum Einfügen und Entfernen von Elementen sowie zum Vereinigen von Mengen und zur Berechnung der Schnittmenge zweier Mengen.
Hier der Code der Musterlösung:
Java:
//Sets of integers between 0 and 31
class Set {
int set = 0;
void include(int x) {
if (x >= 0 && x < 32) set |= 1 << x;
}
void exclude(int x) {
if (x >= 0 && x < 32) set &= ~(1 << x);
}
boolean contains(int x) {
return x >= 0 && x < 32 && ((1 << x) & set) != 0;
}
void union(Set s) {
set |= s.set;
}
void intersect(Set s) {
set &= s.set;
}
public String toString() {
StringBuilder b = new StringBuilder();
boolean first = true;
b.append("{");
for (int i = 0; i < 32; i++)
if (contains(i)) {
if (first) first = false; else b.append(",");
b.append(i);
}
b.append("}");
return b.toString();
}
}
public class Kap11A01 {
public static void main(String args[]) {
Set s = new Set();
s.include(35);
s.include(5);
Out.println("s = " + s);
Set s1 = new Set();
s1.include(5);
s1.include(6);
s1.include(10);
s.union(s1);
Out.println("s = " + s);
s1 = new Set();
s1.include(3);
s1.include(10);
s.intersect(s1);
Out.println("s = " + s);
s.exclude(10);
Out.println("s = " + s);
}
}
Ich tue mich super schwer damit, das zu verstehen..
1.
Code:
void include(int x) {
if (x >= 0 && x < 32) set |= 1 << x;
2.
Java:
public String toString() {
StringBuilder b = new StringBuilder();
boolean first = true;
b.append("{");
for (int i = 0; i < 32; i++)
if (contains(i)) {
if (first) first = false; else b.append(",");
b.append(i);
}
b.append("}");
return b.toString();
Hier bin ich völlig raus. Alleine die Methode contains() lässt mich nur mit Fragezeichen zurück.
Könnt ihr mir da erklären, was da im Programm passiert?
Besten Dank!