Есть ли способ, которым я могу переписать свои методы лучше? - PullRequest
0 голосов
/ 01 апреля 2020

Я не совсем уверен, есть ли более простой ответ на этот вопрос, и я много думаю об этом или о чем, но в настоящее время я программирую прямоугольную angular блочную программу для практики Java. Он имеет 4 метода: getInput, volBlock, saBlock и display, и я хочу использовать только локальные переменные для этих методов. Есть ли способ, с помощью которого я могу использовать getInput для принятия и возврата одного двойного от пользователя, и если да, то как я могу использовать этот ввод в других моих методах?

Я сконструировал этот код, который использует локальные переменные в getInput (), а затем передает эти значения другим методам, но я не смог найти метод отображения, поэтому жестко закодировал его в самих методах вычисления.

Вот этот код:

import java.util.*;
public class Block {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String choice = "Y";
        while (choice.equals("Y")){
            getInput();
            System.out.println("Would you like to do another calculation?(Y/N): ");
            choice = in.next().toUpperCase();
        }
        System.out.println("Program now ending...");
    }

    public static void getInput() {
        double l, w, h;
        Scanner fin = new Scanner(System.in);
        System.out.println("Please enter the length, width, and height in that order: ");
        l = fin.nextDouble();
        w = fin.nextDouble();
        h = fin.nextDouble();

        volBlock(l, w, h);
        surfaceAreaBlock(l,w,h);
    }

    public static void volBlock(double length, double width, double height) {
        double volume;

        volume = length * width * height;

        System.out.println("The volume is: " + volume);
    }

    public static void surfaceAreaBlock (double l, double w, double h) {
        double surfaceArea;

        surfaceArea = 2 * (l*h+l*w+h*w);

        System.out.println("The surface area is: " + surfaceArea);
    }
}

Извините, если этот вопрос не совсем понятен, мне трудно разобраться во всем этом. Я совершенно новичок в Java.

Любая помощь приветствуется, спасибо!

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Если вы практикуете java, вы, вероятно, должны больше узнать о объектно-ориентированном программировании , прежде чем go, потому что ваш код заставляет меня верить, что вы более привыкли к процедурные языки (например, C, C ++, et c). Java не полагается на наличие нескольких вспомогательных методов stati c в своем основном; предпочтительный подход заключается в создании нескольких классов, которые выполняют эти вычисления для вас, и вы используете результаты, созданные этими функциями, для своего базового c ввода / вывода, который обычно используется для main.

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

public class Block {
    private double length;
    private double width;
    private double height;

    public Block(double l, double w, double h) {
        length = l;
        width = w;
        height = h;
    }

    public double getVolume() {
        return length * width * height;
    }

    public double getSurfaceArea() {
        return 2 * length * (height + width) + height * width;
    }

    /* This is the "display" method that you want */
    public String toString() {
        return "The volume is: " + getVolume() + "\n"
               "The surface area is: " + getSurfaceArea();
    }
}

, используя класс Block, ваш основной становится намного проще:

public static void main() {
    Scanner in = new Scanner(System.in);
    char choice = 'y';

    do {
        System.out.print("Please enter the dimensions of the block: ");
        double length = in.nextDouble();
        double width  = in.nextDouble();
        double height = in.nextDouble();
        Block block = new Block(length, width, height);

        System.out.println(block);
        System.out.print("continue (y/n)? ");
        choice = in.nextLine.toLowerCase().charAt(0);
    } while (choice == 'y');
}
0 голосов
/ 01 апреля 2020

Если вы вернете значения из ваших методов getInput (), volBlock () и surfaceAreaBlock (), вы сможете структурировать остальное так, как хотите.

Например, surfaceAreaBlock становится:

public static double surfaceAreaBlock (double l, double w, double h){
    double surfaceArea;

    surfaceArea = 2 * (l*h+l*w+h*w);

    return surfaceArea;
}

, а затем, когда вы вызываете SurfaceAreaBlock, вы можете сделать это:

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

    double surfaceArea = surfaceAreaBlock();

    // Do something with the surface area in this method
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...