Ваш код близок к тому, чтобы быть правым - для новичка в любом случае:)
Похоже, есть небольшое концептуальное недоразумение в том, как вы подходите к решению. Я прошу прощения, если я слишком упрощен, или предполагаю, что вы знаете меньше, чем вы, но кажется, что лучше объяснить, чем объяснить.
Прежде всего main()
метод. Поскольку это static
, это означает, что есть только один из них - вы можете думать об этом как о главном начальнике, контролирующем то, что происходит в вашем маленьком приложении.
Этот метод main()
(босс) создает Box
, это единственный экземпляр "вещи". Босс знает об этом и называет свою коробку a
. Он добавляет эту коробку в коллекцию, которая на данный момент содержит только коробку a
, но в будущем может иметь много коробок. Я уверен, что вы все это уже поняли, просто упомянув это в качестве фона.
Класс Box
может делать несколько вещей. Он знает width
, height
и depth
о себе и знает, как рассчитать volume
и price
на основе этих атрибутов. Он также может print
представлять себя на системной консоли.
В вашем методе main
после создания блока с именем a
вы хотите спросить этот блок, каков его объем. Для этого вам нужно вызвать volume
метод в экземпляре интересующего вас блока .
Итак, вы не просто запрашиваете объем, вы запрашиваете объем коробки a
. Вы делаете это со следующим синтаксисом:
a.volume();
Вам не нужно ничего передавать в метод volume
(поэтому вы должны удалить double BoxV
из метода volume
, потому что метод volume
является частью самого Box
, и поэтому он уже знает все, что знает Box
- width
, height
и depth
, и это все, что ему нужно для вычисления объема.
Итак, нужно сделать несколько изменений:
Метод volume
не должен принимать никаких параметров и должен быть просто:
public double volume() {
return width * height * depth;
}
(обратите внимание, что вам также не нужно присваивать его int Boxvolume
и вы можете удалить эту переменную - или оставить ее, если хотите, полностью на ваше усмотрение)
Как только вы это сделаете в своем методе main
, вы можете получить и напечатать объем коробки a
с помощью:
double volume = a.volume();
System.out.println(volume);
Если вы хотите напечатать объем всех блоков в вашем списке (который пока является только одним), вы бы поместили эквивалентный код в ваш цикл for
, например:
for (Box bx : boxes) {
bx.print();
double volume = bx.volume();
System.out.println(volume);
}
Обратите внимание, что здесь мы вызываем bx.volume()
, а не a.volume()
, потому что в этом случае нас интересует объем блока, который мы сейчас рассматриваем внутри цикла, а не просто блок a
.