2011-10-04 102 views
-7

我正在從ExperimenalImpl獲取數據庫和相關方法的時間,值,權重。這些值顯示在一個表格中。當我們選擇特定的行時,相關的getXxx()方法將會調用。但有些行正在正確獲取數據。只有一行給出這個例外。Got ArrayIndexOutOfBoundsException

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException 
      at java.lang.System.arraycopy(Native Method) 
      at com.integrativebioinformatics.processdb.pdbnt.IBExperimentalDataImpl.getWeights(IBExperimentalDataImpl.java:103) 
      at com.insilicalabs.processdb.ui.controllers.ExperimentalDataController.showExperiment(ExperimentalDataController.java:197) 
      at com.insilicalabs.processdb.ui.controllers.ExperimentalDataController.showExperimentAtIndex(ExperimentalDataController.java:184) 

代碼:

public void setWeights(double[] experimentWeigths) { 
      if (experimentWeigths == null) throw new IllegalArgumentException("cannot take a null argument"); 
      this.experimentWeigths = new double[experimentWeigths.length]; 
      System.arraycopy(experimentWeigths, 0, this.experimentWeigths, 0, experimentWeigths.length); 
      for(int i=0;i<this.experimentWeigths.length;i++){ 
       System.out.println("Weights : "+ experimentWeigths[i]); 
      } 
     } 


public double[] getWeights() { 
     double[] newWeights = new double[this.experimentTimeValuePairs[0].length]; 
     if(this.experimentTimeValuePairs[0].length != 0){ 
      System.arraycopy(this.experimentWeigths, 0, newWeights, 0, this.experimentWeigths.length);//Here, the ArrayIndexOutOfBoundsException occured. 

      for (int i = this.experimentWeigths.length; i < this.experimentTimeValuePairs[0].length; ++i) { 
       newWeights[i] = (0.0D/0.0D); 
      } 
     } 

     return newWeights; 
    } 


    public double[][] getTimeValuePairs() { 
      double[][] newPairs = new double[2][this.experimentTimeValuePairs[0].length]; 
      System.arraycopy(this.experimentTimeValuePairs[0], 0, newPairs[0], 0, this.experimentTimeValuePairs[0].length); 
      System.arraycopy(this.experimentTimeValuePairs[1], 0, newPairs[1], 0, this.experimentTimeValuePairs[1].length); 

      return newPairs; 
     } 


public double[][] getTimeValuePairs() { 
     double[][] newPairs = new double[2][this.experimentTimeValuePairs[0].length]; 
     System.arraycopy(this.experimentTimeValuePairs[0], 0, newPairs[0], 0, this.experimentTimeValuePairs[0].length); 
     System.arraycopy(this.experimentTimeValuePairs[1], 0, newPairs[1], 0, this.experimentTimeValuePairs[1].length); 
     System.out.println("Called getTimeValuePairs() from IBExperimentalDataImpl : "+this.experimentTimeValuePairs); 
     return newPairs; 
    } 
+5

-1 4個問題後,您應該知道如何正確設置問題的格式。 – mre

+12

'ArrayIndexOutOfBounds'是一個非常明顯的例外。某處你正在使用一個超出數組邊界的索引。如果你有任何程序員的野心,你必須學會​​自己調試這種簡單的例外和錯誤。 –

+5

'newWeights [i] =(0.0D/0.0D);'該死的,這是邪惡的:P –

回答

1

望着System.ArrayCopy API,它說:

Otherwise, if any of the following is true, an IndexOutOfBoundsException is thrown and the destination is not modified: 

The srcPos argument is negative. 
The destPos argument is negative. 
The length argument is negative. 
srcPos+length is greater than src.length, the length of the source array. 
destPos+length is greater than dest.length, the length of the destination array. 

我會被調試程序時,看到其中的這些情況發生的開始。

3

您分配newWeights陣列與這個長度this.experimentTimeValuePairs[0].length

arrayCopy您使用this.experimentWeigths.length

您可能應該將newWeights分配給this.experimentWeigths.length,因爲這是您正在複製的內容。

相關問題