Java Arrays - Methode Funktion erklären?

3 Antworten

Ich weiß echt nicht, was die Funktion aussagen soll. Die gibt 0 zurück, falls kein Element des Arrays den Wert 7 enthielt und gibt den 1-basierten Index des letzten Vorkommens zurück, falls mindestens eine 7 gefunden wurde. In diesem Fall wird jeder Wert 7 durch den String "Sieben" ersetzt.
z.B. beim Array [0, 0, 0, 0] wird 0 zurückgegeben (da keine 7 gefunden wird)
z.B. beim Array [1, 3, 7, 9] wird 3 zurückgegeben (1basierter Index der letzten 7) und das Array ändert sich zu [1, 3, "Sieben", 9]

Achso, die 1. Funktion gibt den Wert nach der letzten 7 zurück, kann also auch zum Fehler führen. Die 2. Funktion gibt wie beschrieben den Index zurück. Die 3. Funktion würde jede 7 durch "Sieben1" ersetzen (wenn ich dich richtig verstanden habe)

Woher ich das weiß:eigene Erfahrung

Kurz gesagt: Die Funktionen laufen alle drei gar nicht.

Ein Problem hat eldorim ja schon gesagt: void Funktionen können nichts zurückgeben. Wenn man das behebt, und als Rückgabetyp z.B. Object reinschreibt, kommt das nächste Problem: Man kann in int-Arrays keine Strings reinschreiben.

Jetzt steht aber nicht dabei, wie a und arr deklariert werden. Vielleicht ist a ja ein Object und arr könnte ein Object-Array sein. Dann könnte man arr mit Integer-Objekten füllen und durch da Java das sogenannte "Autoboxing" unterstützt, kann es Integer-Objekte mit ints vergleichen. Allerdings hat das Programm trotzdem ein Problem mit "if (arr[i] == 7)" und es kommt die Fehlermeldung, dass Objekte nicht mit ints verglichen werden können. Das liegt daran, dass arr ja ein Object-Array ist und das Programm an der Stelle nicht weiß, dass es mit Integer-Objekten gefüllt ist. Man kann sie aber casten, um sie zu vergleichen: "if ((Integer) arr[i] == 7)" und schon funktioniert es mit den ersten beiden Funktionen. (Bei der zweiten Funktion muss man nur aufpassen, dass das Array nicht mit einer 7 aufhört, sonst gibts einen Fehler)

Bei der dritten Funktion gibt es noch das Problem, dass man kein int zu einem Object addieren kann, also die Zeile "a = arr[i]+1;" funktioniert so einfach nicht. Wenn man Java jetzt aber sagt, dass an der Stelle ein String steht, dann funktioniert die Stelle auch.

Also man müsste die Funktionen so ändern, damit sie lauffähig sind:

import java.util.stream.Stream;

public class ArrayTests {
    Object a;
    Object[] arr;

    public static void main(String[] args) {
        var a = new ArrayTests();

        a.arr = Stream.of(47, 11, 7, 0, 8, 15).toArray();
        System.out.println(a.function1());

        a.arr = Stream.of(47, 11, 7, 0, 8, 15).toArray();
        System.out.println(a.function2());

        a.arr = Stream.of(47, 11, 7, 0, 8, 15).toArray();
        System.out.println(a.function3());
    }

    public Object function1() {
        a = 0;
        for (int i = 0; i < arr.length; i++) {
            if ((Integer) arr[i] == 7) {
                arr[i] = "Sieben";
                a = i;
            }
        }
        return a;
    }

    public Object function2() {
        a = 0;
        for (int i = 0; i < arr.length; i++) {
            if ((Integer) arr[i] == 7) {
                arr[i] = "Sieben";
                a = arr[i+1];
            }
        }
        return a;
    }

    public Object function3() {
        a = 0;
        for (int i = 0; i < arr.length; i++) {
            if ((Integer) arr[i] == 7) {
                arr[i] = "Sieben";
                a = (String) arr[i]+1;
            }
        }
        return a;
    }
}

Von der Funktionsweise lagst du schon ziemlich richtig. Bei allen drei Funktionen wird zuerst jede 7 durch "Sieben" getauscht. Die erste Funktion liefert dann den Index der letzten 7, die zweite Funktion liefert das Element nach der letzten 7 und die dritte Funktion verkettet den String "Sieben" mit einer 1. Es kommt also "Sieben1" raus.

Da wollte euch euer Lehrer aber ganz schön hinters Licht führen...

Die Methoden funktionieren alle nicht, weil "void" als Rückgabetyp angegeben ist.

Das führt zu einem Compilerfehler, da return Anweisungen mit Rückgabewert bei void unzulässig sind.

Woher ich das weiß:Berufserfahrung
ZaoDaDong  20.06.2023, 07:19

Außerdem ist "a" kein Dateityp zugewiesen. 'Variable "a" kann nicht aufgelöst werden.' sollte da als Fehler auftauchen.

1