2014-07-25 32 views
-4

我剛纔介紹了java類,試圖創建一個用於使用數組計算等級的簡單代碼。我遇到了此問題:無法在原始類型上調用方法雙重

File: C:\Users\Owner\CS-121\GradeDriver.java [line: 18] 
Error: Cannot invoke getPoint() on the primitive type double 

類和驅動程序如下:

public class Grade{ 
    private double point; 

    public Grade(double x){ 
     point = x; 
    } 

    public double getPoint(){ 
     return point; 
    } 
} 


public class GradeDriver{ 

    public static void main(String[] args){ 
     double score; 
     double text = 0; 
     double eoc = 0; 
     double prog = 0; 
     double mid = 0; 
     double fin = 0; 
     double[] textWork = {1.0,4.0,5.0,3.0,3.0,4.0,3.0,1.0,3.0,0.0, 
          9.0,4.0,5.0,6.0,5.0,3.0,5.0,3.0,1.0,1.0, 
          7.0,3.0,8.0,7.0,6.0,1.0,3.0,3.0,3.0,1.0, 
          4.0,2.0,3.0,8.0,1.0}; 
     double[] eocWork = {10.0,34.0,44.0,36.0,40.0,50.0,30.0,38.0, 
          14.0,40.0,12.0,26.0}; 
     double[] progWork = {10.0,10.0,5.0,7.0,7.0,9.0,10.0}; 
     double[] midTerm = {83.0}; 
     double[] finTerm = {68.0}; 

     for(int j = 0; j < textWork.length; j++){ 
      text = text + textWork[j].getPoint(); 
     } 
     text = (text/132.0)*7.0; 

     for(int j = 0; j < eocWork.length; j++){ 
      eoc = eoc + eocWork[j].getPoint(); 
     } 
     eoc = (eoc/384.0)*15.0; 

     for(int j = 0; j < progWork.length; j++){ 
      prog = prog + progWork[j].getPoint(); 
     } 
     prog = (prog/70.0)*28.0; 

     for(int j = 0; j < midTerm.length; j++){ 
      mid = mid + midTerm[j].getPoint(); 
     } 
     mid = mid*0.15; 

     for(int j = 0; j < finTerm.length; j++){ 
      fin = fin + finTerm[j].getPoint(); 
     } 
     fin = fin*0.35; 

     score = fin + mid + prog + eoc + text; 
     System.out.println(score); 
    } 
} 
+1

那麼像'textWork [j]'這樣的東西是雙打的,而你正在試圖調用一個方法 - 這就是錯誤信息所說的。如果它們是'Grade'類的實例,那麼你可以在它們上調用'getPoint()',但它們不是。 –

+3

請修復可怕的格式。 –

+0

'textWork [j] .getPoint(); '你想用這個代碼做什麼? –

回答

1

更改這些循環:

for(int j = 0; j < textWork.length; j++) { 
    text = text + textWork[j].getPoint(); 
} 

到:

for(int j = 0; j < textWork.length; j++) { 
    text = text + textWork[j]; 
} 

你array通過調用來包含雙打您正在調用索引處的值i

此外,可以在包含它們的類的實例上調用方法。在這種情況下,您可以在類Grade的實例中調用getPoint()方法。例如:

Grade grade = new Grade(5.5); 
grade.getPoint(); 

相反,你在你的陣列中的每個值是不是Grade類型,但是double類型的調用它。因此,問題

而且所有的for循環基本上做同樣的事情,所以這將是更好,如果你有一個單一的方法,而不是這麼多的重複代碼

例如

double sum(double[] array) { 
    double result = 0; 
    for(int i = 0; i < array.length; i++) { 
     result += array[i]; 
    } 
} 

,然後要求所有的陣列和存儲的方法,在可變

text = (sum(textWork)/132.0)*7.0; 

等。

相關問題