2016-04-08 10 views
0

Ich erstelle eine QuarterResult Klasse und grundsätzlich habe ich Probleme mit der setResult Methode (das ist nicht der gesamte Code, aber der Code, der für meine Frage notwendig ist).Java - Klassen und Objekte, Set funktioniert nicht?

public class QuarterResult { 
    private double[] results; 

    public QuarterResults() { 
     results = new double[4]; 
    } 

    /** 
    * Set the results at index i to the result passed as the parameter 
    * @param index (return if OOB) 
    * @param result 
    */ 
    public void setResult(int index, double result) { 
     if (index <= 0 || index >= results.length) { 
      return; 
     } 
     else { 
      for (int i = index; i < results.length; i++) { 
      results[index] = result; 
     } 
    } 
} 

Prüfregeln:

myResult.setResult(0, 25.1); 
assertEquals(25.1, myResult.getMark(0), 0.01); 

ERROR: java.lang.AssertionError: expected:<25.1> but was:<0.0>


Nun, wenn ich den Code geändert, wie gesagt die Vorschläge. Ich erhalte jetzt eine Ausnahme:

java.lang.NullPointerException
at xxxx.QuarterResult.setResult(QuarterResult.java:25)

, die die

if (index <= 0 || index >= results.length) { 

Linie ist.

Kann jemand erklären, warum das nicht funktioniert, schien es mit dem ähnlichen Beispiel im Lehrbuch zu funktionieren, funktioniert aber einfach nicht mit meinem Code.

+1

Ändern Sie 'index <= 0 'zu' index <0' – Ambrish

+0

Bearbeiten Sie Ihre Frage nicht, wenn es bereits eine Antwort für ein bestimmtes Problem in diesem Code gibt. – Tom

+1

Um Toms Kommentar zu erweitern: Wenn Sie einen Fehler behoben haben, der bereits darauf hingewiesen wurde, aber immer noch den gleichen Fehler bekommen, dann _add_ das zu Ihrer Frage (zB wie "Ich habe das und das behoben, aber immer noch den gleichen Fehler") Sie erhalten immer noch den Assertion-Fehler, nachdem Sie 'index <= 0 'in' index <0 'geändert haben, und zeigen Sie uns dann, was' myResult.getMark (0) 'macht. – Thomas

Antwort

5

if(index<= 0 ... - Sie passieren 0, also passiert nichts. Ich denke du meinst if(index < 0 ... stattdessen.

Darüber hinaus würde ich nicht nur die Methode in diesem Fall beenden, sondern eine Ausnahme, z. IllegalArgumentException, sonst könnten Sie falsche Parameter vermissen (wie Sie es offensichtlich getan haben).

Schauen Sie auch auf diesen Code:

for (int i = index; i < results.length; i++) { 
    results[index] = result; 
} 

Ist die Schleife wirklich notwendig? (Hinweis: nein)

From your comment: "still unsure what's wrong with my answer"

Ich nehme an, Sie meinen, warum Sie den Assertion-Fehler erhalten. Aufgrund des Fehlers in Ihrem Code wurde results[0] nie gesetzt und hat somit immer noch den Wert, mit dem er initialisiert wurde, was 0,0 für double Variablen oder Elemente von double[] Arrays ist.

+0

Oh ja, das macht Sinn, warum ich 0 bekomme Ergebnis, aber immer noch unsicher, was ist falsch mit meiner Antwort. –

+1

@ Tom war dabei, richtig zu tun, wenn Sie den Kommentar hinzugefügt;) – Thomas

+0

Loop war mehr ein Test, immer noch eine falsche Antwort ohne Schleife. Es sei denn meine Ergebnisse [Index] = Ergebnis; ist falsch? –