Java frage programmieren?
Hallo, ich will eine Methode programmieren die Boolean zurückgibt.
Die Methode hat zwei Parameter einen integer und einen Integer Array.
Die Methode soll schauen, wie oft der Integer 2 zum Beispiel im Array vorkommt.
Also wenn der Integer 2 ist und der int array wäre {2,4,3,2}.
dann kommt der integer 2 mal vor und 2 ist gerade also soll true ausgegeben werden. Weiß jemand wie ich das bewerkstelligen könnte? Bei ungeraden Zahlen soll false rauskommen.
3 Antworten
public class Main {
public static void main(String[] args) {
int[] array = { 2, 4, 3, 2 };
System.out.println(occoursEven(2, array));
}
private static boolean occoursEven(int x, int[] array) {
int amount = 0;// zähle wie oft die Zahl vorkommt
for (int number : array)// gehe alle elemente durch
if (number == x)
amount++;
return amount % 2 == 0;// modulo operator gibt den Rest zurück. Wenn die Zahl durch 2 teilbar ist also
// gerade ist der Rest 0. ACHTUNG wenn x nicht in array ist das Ergbenis auch
// true
}
}
Danke dir! Leider hatte ich vergessen zu erwähnen, das ich das Problem nicht iterativ lösen soll, sondern rekursiv.
Solche Aufgaben finde ich immer ziemlich eigenartig. Normalerweise würde man einfach zählen, wie oft der Wert im Array vorkommt und dann prüfen, ob der Wert gerade oder ungerade ist.
public static boolean evenCount(int num, int[] arr) {
return Arrays.stream(arr).filter(i->i==num).count() % 2 == 0;
}
oder
public static boolean evenCount(int num, int[] arr) {
return (Arrays.stream(arr).filter(i->i==num).count() & 1) == 0;
}
Wenn man es rekursiv lösen soll, ist es deutlich schwieriger. Ich hab jetzt eine Funktion gebaut, die rekursiv die Anzahl der Vorkommnisse zählt und eine Funktion, die halt prüft, ob die Anzahl gerade ist oder nicht.
public static boolean evenCount(int num, int[] arr) {
return countOccurences(num, arr, 0) % 2 == 0;
}
public static int countOccurences(int num, int[] arr, int index) {
if (index >= arr.length) {
return 0;
} else {
return countOccurences(num, arr, index+1) + (arr[index] == num ? 1:0);
}
}
zahl%2 == 0
liefert true, wenn zahl gerade ist. Jetzt musst du nur noch zählen
Das weiß ich, aber das mit dem Zählen wird schwer vor allem da es rekursiv erfolgen soll