2016-12-13 2 views
1

Ich bekomme immer The type of the expression must be an array type but it resolved to ArrayList<Double> Die ArrayList zieht Zahlen aus meiner Test-Klasse. Ich habe das if gemacht, um festzustellen, ob die arrayList eine gerade Menge von Werten enthält oder eine ungerade, denn ich könnte die zwei verschiedenen Möglichkeiten benutzen, um den Median zu bestimmen. Aber ich bin nicht in der Lage, die mittlere Formel zum Funktionieren zu bringen.Probleme finden median von arrayList

public class Data { 

private ArrayList<Double> sets; 

public Data(double[] set) { 
    this.sets = new ArrayList<Double>(); 
    for (double i : set) { 
     this.sets.add(i); 
    } 
} 

public double getMedian(){ 
    Collections.sort(sets); 

    double middle = sets.size()/2; 
     if (sets.size()%2 == 1) { 
      middle = (sets[sets.size()/2] + sets[sets.size()/2 - 1])/2; 
     } else { 

     } 
     return middle; 
} 
+2

'sets' ist eine' ArrayList' nicht ein Array, Sie können nicht die Indexnotation wie 'sets [index]' verwenden, was für reguläre Arrays ist. Verwenden Sie stattdessen 'sets.get (index)'. – Berger

+0

Kurze Antwort, eine ArrayList ist kein Array. Es ist ein Objekt, das ein Array verwendet, also müssen Sie Methoden verwenden, um Werte festzulegen/abzurufen. – AxelH

Antwort

5

Das Problem ist auf der Linie, wo Sie die Mitte zu finden:

middle = (sets[sets.size()/2] + sets[sets.size()/2 - 1])/2; 

Sie [index] Notation nur mit Arrays verwenden können. Sie müssen mit Getter/Setter-Methoden auf die Elemente einer ArrayList zugreifen. Dies sollte funktionieren:

middle = (sets.get(sets.size()/2) + sets.get(sets.size()/2 - 1))/2; 
+0

Seit dieser Zeile wurde unterstrichen (mit einer IDE) oder schön mit 'javac' zu OP gezeigt. Sie sollten erklären, warum ".get (index)" in einer 'ArrayList' verwendet werden muss. Es gibt nicht wirklich eine Erklärung für sein Problem. – AxelH

+0

Du hast Recht @AxelH, ich habe meine Antwort aktualisiert. – salix

1

Sie verwenden arrayList kein Array, so Arraylist des get(int index) Verfahren verwendet werden, müssen die Daten zugreifen zu können. Dies wird wie folgt verwendet:

middle = (sets.get(sets.size()/2) +sets.get((sets.size()/2)-1))/2; 
+1

Könnten Sie versuchen, Ihren Satz neu zu formulieren, das bedeutet nicht viel;) Bitte erklären Sie, warum es nicht wie ein Array verwendet werden kann. – AxelH

+0

Sicher, tnx zum Remindern –

1

Das Problem ist, dass, wenn Sie einen Array mit 4 Elementen haben [0..3], den Median finden Sie gerade tun 4/2 - 1 = 1 und Index 1 ist der Median des Arrays. Jetzt, wenn Array 5 ist, tun Sie einfach 5/2 = 2 und 2 ist der Median.

+0

Warum? Bitte geben Sie keine Code-Antworten – AxelH

+0

ein, wenn Sie ein Array mit 4 Elementen [0..3] haben, um den Median zu finden, tun Sie einfach 4/2 - 1 = 1 und Index 1 ist der Median des Arrays. Jetzt, wenn Array 5 ist, tun Sie einfach 5/2 = 2 und 2 ist der Median. Ich kann Mitte wechseln - einmischen - 1 für mehr lesen – thepaulo

+0

Fügen Sie das zu Ihrer Antwort hinzu, um vollständig zu sein ... – AxelH

Verwandte Themen