2016-04-08 21 views
0

QuarterResult sınıfı oluşturuyorum ve temel olarak setResult yöntemiyle ilgili sorun yaşıyorum (bu, kodun tamamı değil, ancak soru için gereken kod).Java - Dersler ve Nesneler, Set çalışmıyor mu?

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; 
     } 
    } 
} 

Testi kodu: Ben kodu değişti

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


myResult.setResult(0, 25.1); 
assertEquals(25.1, myResult.getMark(0), 0.01); 
Şimdi önerileri söylediği gibi.

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

çizgi olduğunu

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

: Şimdi istisna alıyorum.

Birisi bunun neden çalışmadığını açıklayabilir, ders kitabındaki benzer örnekle çalışıyor gibi görünüyor, ancak sadece kodumla çalışmaz.

+1

'index <= 0' -' index '' 0 '' değiştir – Ambrish

+0

Bu kodda belirli bir sorun için zaten bir yanıt varsa, sorunuzu düzenlemeyin. – Tom

+1

Tom'un yorumunu genişletmek için: Şimdiye kadar işaret edilen bir hatayı düzeltdiyseniz, ancak yine de aynı hatayı düzeltdiyseniz, o zaman sorunuzu yanıtlayın (örneğin, "Bunu düzeltdim ve yine de aynı hatayı aldım" gibi). indeks <= 0 '' indeks <0 '' a dönüştükten sonra assertasyon hatası alınıyor, sonra ne 'myResult.getMark (0)' ın yaptıklarını göster. – Thomas

cevap

5

if(index<= 0 ... - 0 geçiyorsunuz, böylece hiçbir şey olmuyor. Bunun yerine if(index < 0 ... demek istediniz. Bunun yanı sıra, bu durumda bu yöntemi sonlandırmakla kalmaz, istisna atarım, örn. IllegalArgumentException, aksi takdirde yanlış parametreler (tabii ki yaptığınız gibi) özlediniz.

Ayrıca, bu kodu bakmak:

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

döngü gerçekten gerekli mi? (İpucu: hayır)

Neden hata kodunu aldığınızı kastettiğinizi varsayalım. results[0] kodunuzdaki hata nedeniyle hiçbir zaman ayarlanmadı ve bu nedenle başlatıldığı değere sahip oldu, bu double değişkenleri için 0,0 veya double[] dizilerinin öğeleridir.

+0

Oh evet, işte bu yüzden anlamıyorum. sonuç, ama hala benim cevabım ile neyin yanlış olduğunu bilmiyorum –

+1

@Tom yorum eklediğinizde bunu yapmak üzereydi;) – Thomas

+0

Döngü bir test olmaktan çıktı, hala döngü olmadan yanlış bir cevap alıyordu. Sonuçlarım [index] = sonucu olmadıkça; Hata? –