【问题标题】:Is there any way I can rewrite my methods better?有什么办法可以更好地重写我的方法吗?
【发布时间】:2020-04-01 10:59:26
【问题描述】:

我不完全确定这个问题是否有更简单的答案,我正在认真考虑它或什么,但我目前正在编写一个矩形块程序来练习 Java。它的结构有 4 种方法:getInputvolBlocksaBlockdisplay,我只想对这些方法使用局部变量。有没有一种方法可以利用 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 很陌生。

感谢您的帮助,谢谢!

【问题讨论】:

  • 我认为您错过了 OOP 的重点。如果您创建一个包含三个双精度的 Block 类并实现返回双精度的 volumesurfaceArea 方法会更合适,并且您的 main 应该简单地执行输入循环,构造一个新 Block,然后调用适当的方法来求体积和表面积。

标签: java methods


【解决方案1】:

如果您正在练习 java,那么在进一步学习之前,您可能应该更多地熟悉 面向对象编程,因为您的代码让我相信您更习惯于过程语言(例如 C、C++ 等)。 Java 不依赖于在它的 main 中有几个静态辅助方法;首选方法是构建一些为您执行这些计算的类,然后您将这些函数创建的结果用于您的基本输入/输出,这通常是 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 类,您的 main 变得更加简单:

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');
}

【讨论】:

    【解决方案2】:

    如果您从 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
        ...
    }
    

    【讨论】:

    • 如果我想显示surfaceAreaBlock的结果,我将如何在一个单独的方法中做到这一点?
    • 创建一个新方法并将surfaceArea作为参数传入是一个好的开始。我相信你能解决剩下的问题。
    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多