Java frage programmieren?

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

    }

}
Wilan20 
Fragesteller
 30.11.2021, 21:28

Danke dir! Leider hatte ich vergessen zu erwähnen, das ich das Problem nicht iterativ lösen soll, sondern rekursiv.

0

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

Wilan20 
Fragesteller
 30.11.2021, 21:22

Das weiß ich, aber das mit dem Zählen wird schwer vor allem da es rekursiv erfolgen soll

0