2014-02-21 75 views
-1

此測驗分爲兩部分。第一是Java編程調試測驗

public class FixDebugBox { 
    private int width; 
    private int length; 
    private int height; 
    private double Volume; 

    public void FixDebugbox() { 
    length = 1; 
    width = 1; 
    height = 1; 
    } 
    public FixDebugBox(int width, int length, int height) { 
     width = width; 
     length = length; 
     height = height; 
    } 
    public void showData() { 
    System.out.println("Width: " + width + " Length: " + 
     length + " Height: " + height); 
    } 
    public double getVolume() { 
    double vol = length * width * height; 
     return Volume; 
    } 
} 

上面的代碼是測驗的一半,它具有上面的代碼正確地遵守,但第二部分我不能

public class FixDebugFour3 
// This class uses a FixDebugBox class to instantiate two Box objects 
{ 
    public static void main(String args[]) 
    { 
     int width = 12; 
     int length = 10; 
     int height = 8; 

     FixDebugBox box1 = new FixDebugBox(width, length, height); 
     FixDebugBox box2 = new FixDebugBox(width, length, height); 
     System.out.println("The dimensions of the first box are"); 
     box1.showData(); 
     System.out.println("The volume of the first box is"); 
     showVolume(box1); 
     System.out.println("The dimensions of the first box are"); 
     box2.showData(); 
     System.out.println("The volume of the second box is"); 
     showVolume(box2); 
    } 
    public void showVolume() { 
     double vol = FixDebugBox.getVolume(); 
     System.out.println(vol); 
    } 

} 

我一直得到具有雙體積錯誤= FixDebugBox.getVolume();錯誤:非靜態方法getVolume()不能從靜態上下文

+3

如果這是一個測驗,那麼獎品是什麼? – Pshemo

+1

如果這是一個測驗,問題是什麼? –

+2

提交作業的時間表是什麼? – Chiron

回答

1
FixDebugBox.getVolume(); 

getVolume引用的是你不能用類名稱,你需要的對象調用它的公共方法稱之爲非靜態方法。

public void showVolume(FixDebugBox box) { 
     double vol = box.getVolume(); 
     System.out.println(vol); 
    } 

現在給我獎勵。:D

1

我想你已經回答了你自己。您需要持有對FixDebugBox實例的引用以調用其非靜態方法。

1

正如錯誤消息所述,您不能從主要方法的靜態上下文中調用非靜態方法。雖然你可以把你的showVolume()是一個靜態方法,並採取FixDebugBox實例作爲論據,看到FixDebugBox對象如何已經有了getVolume()方法,只是把它爲每個實例:

System.out.println(box1.getVolume()); 
... 
System.out.println(box2.getVolume()); 

另外,不要改變您的Volume變量名稱爲volume。你應該使用camelCase。

1

如果移動

public void showVolume() { 
    double vol = FixDebugBox.getVolume(); 
    System.out.println(vol); 
} 

class FixDebugBoxclass FixDebugBox刪除getVolume()方法,並更改showVolume()方法:

public void showVolume() { 
    double vol = length * width * height; 
    Volume = vol; 
    System.out.println(Volume); 
} 

這將解決您的方案。另外boxVolume將是一個更好的名稱,而不是Volume,因爲變量不應該用大寫字母來書寫。