ursprüngliche Array-Werte bei erneutem Aufruf?

sashady

Mitglied
Hallo, ich habe bei einer Aufgabe ein kleines Problem mit Arrays. Ich musste in einer Methode den min und max Wert eines Arrays suchen und diesen durch die Zahlen min = -100 ( an der Position des Arrays) und max = 100.
In einer anderen Methode soll ich zwei Arrays miteinander verbinden und sie ausgeben, was wunderbar geklappt hat. Mein Problem ist aber, dass die Arrays die falschen Werte, nämlich die abgeänderten, besitzen. Ich soll jedoch wieder die Arrays mit den Ausgangswerten verbinden.
Der Code sieht vorerst so aus:

Java:
// Methode, die die min und max Werte sucht und verändert
private static void replaceMaxMinValue(int[] workArray) {
        int maxNum = workArray[0];
        int minNum = workArray[0];
        for (int i = 0; i < workArray.length; i++) {
            if (workArray[i] > maxNum) {
                maxNum = workArray[i];
            }
            if (workArray[i] < minNum) {
                minNum = workArray[i];
            }
        }
        for (int i = 0; i < workArray.length; i++) {
            if (workArray[i] == minNum) {
                workArray[i] = -100;
            }
            if (workArray[i] == maxNum) {
                workArray[i] = 100;
            }
        }
    }

// Methode, die 2 Arrays verbindet
private static int[] combineArrays(int[] workArray1, int[] workArray2) {
        int length = workArray1.length + workArray2.length;
        int[] combinedArray = new int[length];
        int pos = 0;
        for (int i : workArray1) {
            combinedArray[pos] = i;
            pos++;
        }
        for (int i : workArray2) {
            combinedArray[pos] = i;
            pos++;
        }
        return combinedArray;
    }

public static void main(String[] args) {
    int[] array2 = new int[]{17, 3, 15, 21, 34, 12, 1, 8, 25, 29};
        replaceMaxMinValue(array2);
        System.out.println(Arrays.toString(array2));
    int[] array3 = new int[]{24, 11, 16, 12, 35, 13};
        replaceMaxMinValue(array3);
        System.out.println(Arrays.toString(array3));
   
     int[] array10 = combineArrays(array2, array3);
        System.out.println(Arrays.toString(array10));
       }
}


Die Ausgabe des Codes sieht so aus:

[17, 3, 15, 21, 100, 12, -100, 8, 25, 29]
[17, 3, 15, 21, 100, 12, -100, 8, 25, 29, 24, -100, 16, 12, 100, 13]

Die Ausgabe soll jedoch so aussehen:
[17, 3, 15, 21, 100, 12, -100, 8, 25, 29]
[17, 3, 15, 21, 34, 12, 1, 8, 25, 29, 24, 11, 16, 12, 35, 13]

Ich habe schätz ich mal noch nicht ganz verstanden, wie Arrays funktionieren, kann mir jemand erklären, was ich da falsch mache bzw. nicht beachtet habe?

liebe Grüße

_________________________________________________________________________________________________

EDIT: Ich habe das Problem mit dem Anlegen eines lokalen Arrays in der Methode gelöst!!

Eine weitere Frage zu dem Thema bezüglich min-max Werte suchen:
Wenn in einem Array mehrere min oder max-Werte sind und ich aber nur den Wert an der ersten Stelle verändern möchte, wie gehe ich das am Besten an?
 
Zuletzt bearbeitet:
Merke Dir statt min/max die Positionen. Und die veränderst Du nur, denn der neue Wert kleine (bzw. größer) als der Wert an der gemerkten Position ist. Das dürfte mit das einfachste sein.

Und Deine Lösung mit dem kopieren des Arrays ist richtig. Das ist dann auch der normale Aufbau: Die Methode, die die Werte ersetzen soll, erzeugt ein neues Array und gibt dieses zurück. Bei dem Durchlauf zur suche nach Min/Max Werten kann man ja auch direkt kopieren...
 
Signatur der Methode ändern: statt void wird ein Array zurück gegeben.

Dann mach die Schritte einzelnd:
- Erzeuge ein neues Array mit der gleichen Größe wie das übergebene Array.
- Gehe alle Elemente durch und kopiere den Wert aus dem übergebenen Array in das neue Array.
- ändere den vorhandenen Code so ab, dass er mit dem neuen Artay arbeitet
- am Ende der Methode gib das neue Array zurück.

Den Aufruf musst du dann anpassen: du musst die Rückgabe vom Aufruf in einer Variablen speichern und dann nicht das Original Array sondern das zurückgegebene ausgeben.
 
Die einfachste Lösung beteht darin, den Code umzuorganisieren, also statt:
Java:
public static void main(String[] args) {
    int[] array2 = new int[]{17, 3, 15, 21, 34, 12, 1, 8, 25, 29};
        replaceMaxMinValue(array2);
        System.out.println(Arrays.toString(array2));
    int[] array3 = new int[]{24, 11, 16, 12, 35, 13};
        replaceMaxMinValue(array3);
        System.out.println(Arrays.toString(array3));

     int[] array10 = combineArrays(array2, array3);
        System.out.println(Arrays.toString(array10));
       }
}
besser:
Java:
public static void main(String[] args) {
    int[] array2 = new int[]{17, 3, 15, 21, 34, 12, 1, 8, 25, 29};
    int[] array3 = new int[]{24, 11, 16, 12, 35, 13};
    int[] array10 = combineArrays(array2, array3); // hier wied eine Kopie erstellt
    replaceMaxMinValue(array2); // hier wird das ursprüngliche Array verändert
    System.out.println(Arrays.toString(array2));
    replaceMaxMinValue(array3); // hier wird das ursprüngliche Array verändert
    System.out.println(Arrays.toString(array3));
    System.out.println(Arrays.toString(array10));
}
Mit anderen Worten: Du kombiniertst die Arrays, bevor du sie veränderst.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben