【问题标题】:Trying to use an Instance variable from a void method (java)尝试使用 void 方法中的实例变量(java)
【发布时间】:2020-06-08 11:24:44
【问题描述】:

我目前正在编写一个代码,要求提供包裹尺寸,然后使用体积来计算运输成本。还有一个我没有包含在处理成本计算的帖子中的课程。我目前不知道如何将 inputLength 等方法的输入放入 Package 和 Package 复制方法中。还有为什么我不能在 calcVolume 和 displayDimensions 方法中使用它们。

import java.util.Scanner;

public class Package {

    private double length;
    private double width;
    private double height;
    private Scanner input = new Scanner(System.in);

    public Package() {

        double length = 1.0;
        double width = 1.0;
        double height = 1.0;

    }

    public static void main(String[] args) {

        System.out.printf("Welcome to Colin's Shipping Calculator!%n%n");
        System.out.printf("Enter first package dimensions%n");

        Package volCalc;
        volCalc = new Package();
        volCalc.inputLength();
        volCalc.inputWidth();
        volCalc.inputHeight();

        System.out.printf("Enter second package dimensions%n");

        volCalc.inputLength();
        volCalc.inputWidth();
        volCalc.inputHeight();

        volCalc.displayDimensions();
        volCalc.calcVolume();
        Shipment shipCalc = new Shipment();
        shipCalc.inputPackage();
        shipCalc.inputPackage();
        shipCalc.calculateCost();
        shipCalc.display();



    }

    public Package(double length, double width, double height) {
        this.length = length;
        this.width = width;
        this.height = height;

    }

    public Package(Package copy) {

        Package newPackage = new Package();
        newPackage.length = copy.length;
        newPackage.width = copy.width;
        newPackage.height = copy.height;

    }

    public void inputLength() {
        System.out.printf("Enter Length: ");
        double length = input.nextDouble();


    }

    public void inputWidth() {
        System.out.printf("Enter Width: ");
        double width = input.nextDouble();

    }

    public void inputHeight() {
        System.out.printf("Enter Height: ");
        double height = input.nextDouble();

    }

    public void displayDimensions() {
        System.out.printf(length + " X " + width + " X " + height);

    }

    public double calcVolume() {
        double volume = length*width*height;
        System.out.printf("%nVolume: " + volume);

        return volume;

    }

【问题讨论】:

  • @khelwood 分配说明表明我拥有的所有方法都无效
  • 您的输入法是否应该将值写入您的类的实例字段?
  • @khelwood 是的,输入方法获取两个包裹(包裹和包裹副本)的尺寸值,然后我没有包含的 Shipment 类计算运送这两个包裹的成本。该程序还应显示每个包裹的体积和尺寸。
  • 你的输入法只是给局部变量赋值,而不是给实例变量赋值。请参阅某人发布的答案以了解如何解决它。

标签: java methods void


【解决方案1】:

您通过在方法中再次声明它们来隐藏您的成员变量。尝试删除函数中变量名前的“double”。

这里是一个例子。我还将每个 printf 语句更改为 print 或 println。但我不确定 Shipment 应该如何工作。

import java.util.Scanner;

public class Package {

    private double length;
    private double width;
    private double height;
    private Scanner input = new Scanner(System.in);

    public Package() {
        this.length = 1.0;           // Removed 'double'
        this.width = 1.0;
        this.height = 1.0;
    }

    public static void main(String[] args) {
        System.out.println("Welcome to Colin's Shipping Calculator!\n");
        System.out.println("Enter first package dimensions");

        Package packageA;
        packageA = new Package();
        packageA.inputLength();
        packageA.inputWidth();
        packageA.inputHeight();

        packageA.displayDimensions();
        packageA.calcVolume();

        System.out.println("Enter second package dimensions");
        Package packageB = new Package();           // New Package

        packageB.inputLength();
        packageB.inputWidth();
        packageB.inputHeight();

        packageB.displayDimensions();
        packageB.calcVolume();

        Shipment shipCalc = new Shipment();
        shipCalc.inputPackage();
        shipCalc.inputPackage();
        shipCalc.calculateCost();
        shipCalc.display();
    }

    public Package(double length, double width, double height) {
        this.length = length;   //'this' needed else shadowing occurs
        this.width = width;
        this.height = height;
    }

    public Package(Package copy) {
        // Package newPackage = new Package(); Not needed
        this.length = copy.length;  // 'this' just for clarification.
        this.width = copy.width;
        this.height = copy.height;
    }

    public void inputLength() {
        System.out.print("Enter Length: ");
        length = input.nextDouble();    // Removed 'double'
    }

    public void inputWidth() {
        System.out.print("Enter Width: ");
        width = input.nextDouble();     // Removed 'double'
    }

    public void inputHeight() {
        System.out.print("Enter Height: ");
        height = input.nextDouble();    // Removed 'double'
    }

    public void displayDimensions() {
        System.out.println(length + " X " + width + " X " + height);
    }

    public double calcVolume() {
        double volume = length * width * height;
        System.out.println("Volume: " + volume);

        return volume;
    }
}

【讨论】:

  • 谢谢!我修复了它,并认为我理解我做错了什么。
  • 好的,我有一个后续问题,如何将输入法中的值存储在包和包副本中?
  • 据我了解,将值存储在原始包中是可行的,并且您希望包副本中的值也可以更新。您可以使用 Integer 之类的对象来执行此操作,但我不明白为什么你需要复制包。
  • 我想要做的是使用我正在写的另一类中包裹 A 和 B 的体积来计算他们的运费。就我现在而言,Package 和 Package copy 应该分别取 Package A 和 B 的值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多