2013-08-19 46 views
0

我一直在做一些關於繼承抽象類的教程,並且我將一個數組傳遞給函數以計算總價格。但是,當我試圖調用main函數時,它不起作用,並且根據方法調用發生了一些錯誤。如何在主應用程序中使用數組參數調用函數?

這裏是我的子類運算代碼:

public double calcPrice(String[] a, int[] qty, int num){ 
    int i =0; 
    for(i=0;i<=num;i++) { 
     if (a[i]=="a") 
      price=24.90; 
    } 

    double tot=price+qty[i]; 
    return tot; 
} 

這是環在我的方法調用。我不知道如何調用該方法的錯誤說

for(int i=0;i<=num;i++) { 
    System.out.println("\t"+a[i]+"\t\t\t"+qty[i]+" "+calcPrice()); 
} 

回答

2

主要方法是靜態的「非靜態方法calcPrice()不能從靜態上下文引用」,而不能打電話非靜態代碼。你有2個解決方案。

  • 創建執行計算的類的實例,並在該實例上調用calcPrice

  • 使calcPrice靜態。

我建議選擇一個你一直在班級做研究。這對你來說是很好的做法。

也不要比較變量a"a"==。改爲使用.equalsCheck this link爲什麼。

編輯:

我不知道一個抽象類,如何發揮這個,你有沒有抽象方法需要實現。

public class CalcClass{ 
    public double calcPrice(String[] a, int[] qty, int num){ 
     int i =0; 
     for(i=0;i<=num;i++) { 
      if ("a".equals(a[i])) 
       price=24.90; 
     } 

     double tot=price+qty[i]; 
     return tot; 
    } 
} 

public class MainClass{ 
    public static void main(String[] args){ 
     //create instance of calc class 
     CalcClass c = new CalcClass(); 
     //call calc price method on calcclass 
     c.calcPrice(a, new int[]{1}, 1}; 
    } 
} 
+0

我想使用的選項1,但我必須創建另一個類,不是抽象的?或者我應該只使用主類? – deenaiena

+0

創建一個單獨的課程。你不能創建一個抽象類的實例。我會在我的答案中證明。 –

+0

請告訴我如何,我不太明白。 Thankyou :) – deenaiena

1

改變TO-

public static double calcPrice(String[] a, int[] qty, int num){ 
    ... 
} 

你從主呼叫之前,您應該創建一個對象。假設您有一個班級 -

public class Test { 

    public void someMethod(){ 

    } 

    public static void main(String... args){ 

     // Create an object first 
     Test t = new Test(); 

     // Now you can use that non-static method someMethod 
     t.someMethod(); 

    } 

} 

對於靜態方法,它們存在於負載上。

+0

當涉及到繼承時,它對於靜態還是非靜態是重要的? – deenaiena

+0

@deenaiena請參閱:http://docs.oracle.com/javase/tutorial/java/IandI/subclasses。html –

+0

謝謝,我試過了,但得到另一個錯誤:( – deenaiena

0

由於您的方法不是靜態的,您需要創建實例才能調用方法。

使您可以在不創建類的實例的情況下使用它。

你可能想了解Static Methods here

+0

謝謝你的鏈接和你的幫助,我會試試:) – deenaiena

相關問題