public class EndlicheMenge {
int maximaleGroesse; // Größe eines Arrays initial 0
int[]endlicheMenge; //erstellt ein Array aus der maximalGroesse
private int iZaehler;
private int countNumbers;
//Konstruktor für endliche Mengen. Initialgröße 0.
EndlicheMenge(int maximaleGroesse) {
endlicheMenge = new int[maximaleGroesse];
}
int iZaehler(int elem) {
for (int i = 0; i < endlicheMenge.length; i++) {
if (endlicheMenge[i] == elem) {
iZaehler = i;
break;
}
}
return iZaehler;
}
//prüft ob gesuchter Wert bereits enthalten ist
/**
* @param elem
* @return boolean
*/
public boolean enthalten(int elem) {
boolean enthalten = false;
for (int i = 0; i < endlicheMenge.length; i++) { // mit einer Schleife wird das Array von 0 bis zum letzten Element abgesucht
if (endlicheMenge[i] == elem) {// entspricht ein Element an einer Stelle "i" dem Gesuchten, // wird "true" ausgegeben
enthalten = true;
this.iZaehler(elem); // Speichern des "i"Wertes. Wichtig beim Löschen eines bestimmten Wert
break;
}
}
return enthalten; //ansonsten falsch
}
//fügt einen Wert ein, falls er nicht schon vorhanden ist
/**
* @param elem
*/
public void einfuegen(int elem) {
if (!enthalten(elem)) { // prüft mit der Methode "enthalten(int elem)", ob ein Element bereits in der Menge existiert; wenn "false" =>
for (int i = 0; i < this.endlicheMenge.length; i++) {
if (this.endlicheMenge[i] == 0) {
this.endlicheMenge[i] = elem;
break;
}
}
//endlicheMenge[counter] = elem;// wird an der Stelle "Counter"(im ersten Fall 0) dieses Element eingefügt
}
}
// löscht einen Wert, falls er vorhanden ist, indem der Wert überschrieben wird vom folgenden rechten. Dadurch wird das Array unkomplizierter
// genutzt als mit mittigen Nullstellen
/**
* @param elem
*/
public void loeschen(int elem) {
if (this.enthalten(elem)) {
this.endlicheMenge[iZaehler] = 0;
}
}
int max(EndlicheMenge m) { // die Größe des kleineren Arrays wird die Größe des neuen
int max = 0;
if (this.endlicheMenge.length > m.endlicheMenge.length)
max = m.endlicheMenge.length;
else max = this.endlicheMenge.length;
return max;
}
/**
* @param m
* @return durchschnitt
*/
public EndlicheMenge durchschnitt(EndlicheMenge m) {
int max; // die Größe des kleineren Arrays wird die Größe des neuen
if (this.endlicheMenge.length > m.endlicheMenge.length)
max = m.endlicheMenge.length;
else max = this.endlicheMenge.length;
// eine neue Menge, die die Schnittpunkte der beiden Mengen beinhaltet mit der Groesse max
EndlicheMenge durchschnitt = new EndlicheMenge(max);
//zwei Schleifen, die durch beide Arrays laufen.
//sind zwei Elemente gleich, wird es dem Durchschnitt hinzugefügt
for (int i = 0; i < m.endlicheMenge.length; i++ )
for (int j = 0; j< this.endlicheMenge.length; j++) {
if (m.endlicheMenge[i] == this.endlicheMenge[j])
durchschnitt.einfuegen(this.endlicheMenge[j]);
}
return durchschnitt;
}
//Vereinigung von zwei Mengen; beinhaltet alle Werte;
/**
* @param m
* @return Vereinigung
*/
public EndlicheMenge vereinigung(EndlicheMenge m) {
int max = this.endlicheMenge.length + m.endlicheMenge.length; // Länge ist Summe der beiden Grundmengen
EndlicheMenge Vereinigung = new EndlicheMenge(max);
for (int i = 0; i < this.endlicheMenge.length; i++) {
Vereinigung.einfuegen(this.endlicheMenge[i]);
Vereinigung.einfuegen(m.endlicheMenge[i]);
}
for (int i = 0; i < m.endlicheMenge.length; i++) {
Vereinigung.einfuegen(m.endlicheMenge[i]);
}
return Vereinigung;
}
//erzeugt die Differenz von zwei Mengen
/**
* @param m
* @return Differenz
*/
public EndlicheMenge differenz(EndlicheMenge m) {
int max = this.endlicheMenge.length; //Länge der Differenzmenge entspricht der der aktuellen Menge
EndlicheMenge Differenz = new EndlicheMenge(max);
for (int i = 0; i< this.endlicheMenge.length; i++)
for (int j = 0; j < m.endlicheMenge.length; j++) {
if (!m.enthalten(this.endlicheMenge[i]))
Differenz.einfuegen(this.endlicheMenge[i]);
if (!this.enthalten(m.endlicheMenge[i]))
Differenz.einfuegen(m.endlicheMenge[i]);
}
return Differenz;
}
// Zählt "nicht-0" Elemente in einem Array
int countNumbers() {
for (int i = 0; i < this.endlicheMenge.length - 1; i++) {
if (this.endlicheMenge[i] != 0)
countNumbers++;
}
return countNumbers;
}
// gibt die Werte eines Arrays ohne Nullen aus
int[] getNumbers() {
for (int i = 0; i < this.endlicheMenge.length; i++) {
if ( this.endlicheMenge[i] != 0)
countNumbers++;
}
int[]getNumbers = new int[countNumbers];
int j = 0;
for (int i = 0; i < this.endlicheMenge.length; i++) {
if (this.endlicheMenge[i] != 0) {
getNumbers[j] = this.endlicheMenge[i];
j++;
}
}
return getNumbers;
}
/**
* @param m
* @return boolean
*/
public boolean istGleich(EndlicheMenge m) {
for (int i = 0; i < this.getNumbers().length -1; i++) {
for (int j = 0; j < m.getNumbers().length -1; j++) {
if (this.getNumbers()[i] == m.getNumbers()[j])
return true;
}
}
return false;
}
// liefert kompletten derzeitigen Inhalt des aktuellen Arrays
public String toString() {
String Ausgabe = "Auszulesendes Array: ||";
for (int i = 0; i < this.endlicheMenge.length; i++)
Ausgabe += this.endlicheMenge[i] + "||"; // gibt jedes Element des gewählten Arrays aus.
return Ausgabe;
}
}
public class BegrenzteMenge extends EndlicheMenge {
int maximaleGroesse;
int begrenzteMenge[];
boolean include;
/**
* @param maximaleGroesse
*/
public BegrenzteMenge (int maximaleGroesse, boolean include) {
super(maximaleGroesse);
this.include = include;
}
/**
*
*/
public void complement() {
include = !include;
}
public boolean enthalten(int elem) {
if (include)
return super.enthalten(elem);
else
return !super.enthalten(elem);
}
public void einfuegen(int elem) {
super.einfuegen(elem);
}
public void loeschen(int elem) {
super.loeschen(elem);
}
/**
* @param m
* @return BegrenzteMenge
*/
int countNumbers() {
return super.countNumbers();
}
int[]getNumbers() {
return super.getNumbers();
}
/*int max(BegrenzteMenge m) {
int max=0;
if (this.countNumbers() > m.countNumbers()) {
max = m.countNumbers();
}
else {
max = this.countNumbers();
}
return max;
}
*/
/**
* @param m
* @return BegrenzteMenge
*/
public BegrenzteMenge durchschnitt(BegrenzteMenge m) {
if (this.include && m.include){
EndlicheMenge hilfsmenge = super.durchschnitt(m);
hilfsmenge.getNumbers();
hilfsmenge.countNumbers();
}
BegrenzteMenge Durchschnitt = new BegrenzteMenge(super.countNumbers(), m.include);
return Durchschnitt;
}
/**
* @param m
* @return BegrenzteMenge
*/
public BegrenzteMenge vereinigung(BegrenzteMenge m) {
return (BegrenzteMenge)super.durchschnitt(m);
}
/**
* @param m
* @return boolean
*/
public boolean istGleich(BegrenzteMenge m) {
return super.istGleich(m);
}
public String toString() {
if ( include)
return super.toString();
else
return "Alle Zahler außer: " + super.toString();
}
}