2014-02-21 2 views
-1

Эта викторина состоит из двух частей. Во-первых этоJava Programming Debug Quiz

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 FixDebugBox и удалить метод getVolume() в class FixDebugBox и изменить метод showVolume() на:

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

Это будет исправить вашу программу. Также boxVolume будет лучшим именем вместо Volume, так как переменные не должны быть написаны с большой буквы.