Печать метода из основного метода - PullRequest
0 голосов
/ 29 августа 2018

Я довольно новичок в java, и мне интересно, как я могу напечатать переменную Boxvolume из моего volume метода.

Я понимаю, что мне нужно сделать Boxvolume глобальной переменной. Так что, если кто-нибудь сможет мне помочь с этим, я буду очень признателен.

Вот мой код:

public static void main(String[] args) {
    Box a = new Box(20, 30, 40);

    ArrayList<Box> boxes = new ArrayList<>();
    boxes.add(a);

    for (Box bx : boxes) {
        bx.print();
    }

    double V = volume(Boxvolume);
    System.out.println(V);
}

class Box {
    int width;
    int height;
    int depth;

    public Box(int w, int h, int d) {
        this.width = w;
        this.height = h;
        this.depth = d;
    }

    public double volume(double BoxV) {
        int Boxvolume = width * height * depth;
        return Boxvolume;
    }

    public double price(double BV) {
        double Boxprice = volume(BV) * 5;
        return Boxprice;
    }

    public void print() {
        System.out.println(this.width);
        System.out.println(this.height);
        System.out.println(this.depth);
        System.out.println();
    }
}

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Рекомендуется следовать соглашениям об именах Java и удалить ненужные параметры.

Этот пример дает ваш Box метод toString() для печати, удаляет необязательные параметры, дает имена переменных в соответствии с соглашениями об именах Java и использует методы класса getVolume() и getPrice() в других методах класса. Если у вас есть height, width и depth в качестве атрибутов класса, вам не понадобятся дополнительные атрибуты для объема или цены, просто верните результаты, используя height, width и depth или метод класса :

class Box {

    int width;
    int height;
    int depth;

    public Box(int w, int h, int d) {
        this.width = w;
        this.height = h;
        this.depth = d;
    }

    /*
     * - renamed the method
     * - removed the dispensable parameter
     */
    public double getVolume() {
        int Boxvolume = width * height * depth;
        return Boxvolume;
    }

    /*
     * - renamed the method
     * - removed the dispensable parameter
     */
    public double getPrice() {
        // use the getVolume() method
        double Boxprice = this.getVolume() * 5;
        return Boxprice;
    }

    public void print() {
        // just print the toString() method
        System.out.println(this.toString());
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();

        sb.append("Height: ");
        // here you take the class attributes
        sb.append(height);
        sb.append("\n");
        sb.append("Depth: ");
        sb.append(depth);
        sb.append("\n");
        sb.append("Width: ");
        sb.append(width);
        sb.append("\n");
        sb.append("Price: ");
        // here you just take your method
        sb.append(getPrice());
        sb.append("\n");
        sb.append("Volume: ");
        // so you do here
        sb.append(getVolume());
        sb.append("\n");

        return sb.toString();
    }
}

Затем вы можете проверить вывод в классе, который имеет main метод:

import java.util.ArrayList;

public class PasteClass {

    public static void main(String[] args) {
        Box a = new Box(20, 30, 40);
        Box b = new Box(10, 20, 30);

        ArrayList<Box> boxes = new ArrayList<>();
        boxes.add(a);
        boxes.add(b);

        for (Box bx : boxes) {
            bx.print();
        }
    }
}
0 голосов
/ 29 августа 2018

Ваш код близок к тому, чтобы быть правым - для новичка в любом случае:)

Похоже, есть небольшое концептуальное недоразумение в том, как вы подходите к решению. Я прошу прощения, если я слишком упрощен, или предполагаю, что вы знаете меньше, чем вы, но кажется, что лучше объяснить, чем объяснить.

Прежде всего 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.

0 голосов
/ 29 августа 2018

Ваш код неверен. Сначала вам нужно вызвать ваш метод громкости из переменной экземпляра, равной a.volume();. Также вам не нужен двойной параметр в ваших методах объема и цены. Метод Price уже вызывает объем, и вы не используете параметр BV в объеме.

Так что правильная версия должна выглядеть так:

public static void main(String[] args) {

    Box a = new Box(20, 30, 40);

    ArrayList<Box> boxes = new ArrayList<>();

    boxes.add(a);

    for (Box bx : boxes) {
        bx.print();
        System.out.println(bx.volume());
    }    
}

class Box {

    int width;
    int height;
    int depth;


    public Box(int w, int h, int d) {
        this.width = w;
        this.height = h;
        this.depth = d;

    }

    public double volume() {

        int Boxvolume = width * height * depth;
        return Boxvolume;

    }

    public double price() {

        double Boxprice = volume() * 5;

        return Boxprice;
    }



    public void print() {

        System.out.println(this.width);
        System.out.println(this.height);
        System.out.println(this.depth);

        System.out.println();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...