Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich hab hier ne Aufgabe, die noch nicht richtig funktioniert,
Es soll gecheckt werden, ob die Mengen der array gleich sind, die Reihenfolge ist dabei belanglos.
Bisher geht der Test aber nur richtig, wenn die arrays die gleiche Länge haben, die Elemente prüft der Algorithmus noch ned richtig ab.
Weiß jemand Rat.
Java:
public class Mengen {
static boolean compareSets(int[] a, int[] b) {
if (a.length != b.length)
return false;
for (int i = 0; i < a.length; i++) {
int j = 0;
while (j < b.length && b[j] != a[i])
j++;
if (j == b.length)
return false;
}
return true;
}
public static void main(String[] args) {
int a[] = {1,1,1};
int b[] = {1,3,2};
System.out.println(compareSets(a, b));
}
}
Habs gefunden:
Java:
public class MehrMain {
public static void main(String[] args) {
int[]a=new int[]{1,2,3,4,5};
int[] b= new int[]{2,3,1,5,4};
System.out.println("Mengen gleich? "+compareSets(a,b));
}
public static boolean compareSets(int[]a, int[]b){
if(a.length<b.length)
return false;
for(int i=0;i<a.length;i++){
int j =0;
while(j<b.length&&a[i]!=b[j]){
j++;
if(j==b.length)
return false;}}
return true;
}
}
/** Checks whether {@code a} contains all elements of {@code b} */
boolean contains(int[] a, int[] b) {
for (int i : a) {
boolean found = false;
for (int j : b) {
if (j == i) {
found = true;
break;
}
}
if (!found) {
return false;
}
}
return true;
}
boolean equalSet(int[] a, int[] b) {
return contains(a, b) && contains(b, a);
}
Probier mal mit [c]1,1,1,2,3,4[/c] und [c]4,2,4,3,1,1[/c]; sind ja mengengleich, oder?
Ebenius
Solche Zeilen wie [c]while(j<b.length&&a!=b[j]){[/c] finde ich schwer nachzuvollziehen... Wenn du wissen willst, warum das nicht funtkioniert, wirst du diese Zeile selbst genau nachvollziehen müssen... das war's dann eigentlich schon :bahnhof:
Sowas kann man ja runterbrechen:
- Zwei Mengen sind gleich, wenn sie sich gegenseitig enthalten:
[c]return contains(a,b) && contains(b,a);[/c]
- Eine Menge enthält eine andere, wenn sie jedes Element der anderen Enthält
Code:
for (int element : b)
{
if (!contains(a, element)) return false;
}
return true;
- Eine Menge enthält ein Element, wenn eines ihrer Elemente gleich dem Element ist:
Code:
for (int element : a)
{
if (element == searchedElement) return true;
}
return false;
Das sind dann drei Methoden, übersichtlich, einfach und leicht nachvollziehbar...