Zugriff auf Spalten innerhalb eines Arrays


mR.fLopPy

Erfahrenes Mitglied
#1
Hallo,
ich habe eine Aufgabenstellung erhalten bei der es darum geht, dass ich den Median aus den Werten eines Arrays ausrechnen soll.
Laut der Angabe wird bei einer geraden Anzahl von Eingaben die sich in der Mitte befindlichen zwei Werte zusammengezählt mit einer Division durch 2 der Median berechnet, während bei einer ungeraden Anzahl an Eingaben lediglich der Wert aus dem Array ausgelesen werden muss, welcher sich in der exakten Mitte befindet. So wird beispielsweise bei einer Arraylänge von 7 die Stelle 4 des Arrays für die Bestimmung des Medians herangezogen.

Ich habe dies folgendermaßen versucht zu lösen und stoße dabei auf das Problem, dass die Stelle im Array stets die Falsche ist.

(Auszug vom Code)
Java:
public class Median {
    static Scanner readNum;
    static int inputSizeFromArray;
    static int temp;
    static double median;
    static int[] inputTable = new int[8];

   inputTable = {1,2,3,4,5,6,7,8};

    static void calcMedian() {
        if (inputTable.length % 2 == 0) {
            median = (inputTable[(inputSizeFromArray / 2) - 1] + inputTable[inputSizeFromArray / 2]) / 2;
        } else {
            median = inputTable[(inputSizeFromArray / 2)];
        }
        System.out.println("Folgende Werte befinden sich im Array: ");
        for (int i : inputTable) {
            System.out.print(i + ", ");
        }
        System.out.println("Der Median von diesen Werten lautet: " + median);
    }
}
Ausgehend davon, dass
Code:
inputSizeFromArray = 8
müsste
Code:
inputTable[(inputSizeFromArray / 2) - 1] = 3
ergeben, jedoch bekomme ich laut Debugger den Wert 4. Ebenso bekomme ich auch bei
Code:
inputTable[inputSizeFromArray / 2] = 5
Ich hoffe das ihr mich diesbezüglich aufklären könnt, wieso es laut dem Debugger zum Wert 5 und nicht 4 kommt.

Beste Grüße
mr.floppy
 
Zuletzt bearbeitet:
#2
Moin,
dass ich den Median aus den Werten eines Arrays ausrechnen soll
Dein Array wird doch gar nicht gefüllt!!
Java:
inputTable[inputSizeFromArray / 2] = 5
der Wert des Array an der Stelle "inputSizeFromArray / 2" ist nur dann 5, wenn Du vorher '5' rein tust!
Zudem finde ich dies sehr gefährlich: wenn "inputSizeFromArray" ungerade ist, dann dürfte es in diesem Fall böse knallen (so es denn überhaupt compiliert, was ich auch nicht glaube!!

VG Klaus
 

Yaslaw

n/a
Moderator
#3
Ein Array beginnt normalerweise mit dem Index 0
Code:
inputTable[0] => 1
inputTable[1] => 2
...
inputTable[3] => 4
inputTable[4] => 5
 etc..
Also. 8/2 ergibt 4. Minus eins ergibt den Index 3...
 

mR.fLopPy

Erfahrenes Mitglied
#4
Hi vlf_freak,
danke für deine Antwort. Doch, doch - das Array wird gefüllt durch Benutzereingaben. Es handelt sich hierbei nur um den Auszug des Codes, den ich geschrieben habe. Genauer gesagt habe ich nur die Variablen und die Methode gepostet, welche den Median berechnet.

Der Benutzer wird zunächst gefragt wieviel Eingaben gemacht werden sollen. Ausgehend von bspw. 8 Eingaben mit den Werten 1,2,3,4,5,6,7,8 habe ich meine Tests durchgeführt. Falls dies für das Verständnis fehlt ergänze ich gerne das oben im Code.

EDIT:
Hab habe den Code ergänzt.

@Yaslaw: Mir ist gerade aufgefallen dass ich wohl im Debugger auf Grund der von mir angegebenen Zahlen den Index mit den Eingabewerten verwechselt habe. Jetzt weiß ich auch mein Problem. Da es sich um Integerwerte handelt wird anscheinend dennoch bei der Division die Kommastelle entfernt obwohl meine Variable Median vom Typ double ist. Ich schätze ich muss wohl auch alles auf double umstellen, da ich die Eingabewerte mit Integer.parseInt() einlese.

Nachdem ich das Array und meine temp variable auf double umgestellt habe hat es geklappt. Danke für die schnelle Reaktion! :)
 
Zuletzt bearbeitet: