【问题标题】:Printing user input from a copy constructor (java) [closed]从复制构造函数(java)打印用户输入[关闭]
【发布时间】:2020-10-14 14:01:26
【问题描述】:

我是 java 新手,不知道如何使用复制构造函数。请多多包涵。

我正在尝试获取有关运送包裹的信息。我正在尝试使用复制构造函数来重复输入运输详细信息部分。

老实说,我不知道该怎么处理它。该代码适用于一个包并且没有错误 - 我只需要弄清楚如何提示用户输入第二个包。

import java.util.Scanner;

public class Package {
    
    private static double length = 1.0;
    private static double width = 1.0;
    private static double height = 1.0;
        
    private static double sum1 = length+width+height;
    
        public Package(Package p) {
        this.height = p.height;
        this.length = p.length;
        this.width = p.width;
            }
    
    
    public static void main(String[] args) {
        
        Scanner input = new Scanner(System.in);
        
        System.out.println("Enter package dimensions.\nEnter Length: ");
        length = input.nextDouble(); 
    
        System.out.println("\nEnter Width: ");
        width = input.nextDouble();
    
        System.out.println("\nEnter Height: ");
        height = input.nextDouble();

    
    
        System.out.println("Package 1: " + length + " X " + width + " X " + height + ", Volume = " + sum1);
    
    }
    
}

【问题讨论】:

  • 你甚至没有使用构造函数。您可以使用 for 循环询问用户 2 次或 3 次或 n 次。
  • 呸——丢人!他们特别要求我们使用该类的复制构造函数。但我真的不知道我应该问什么问题。
  • 老实说,这听起来你应该退后一步,重新阅读构造函数是什么以及它们是如何使用的。
  • 你可能没看错
  • 补充一点:接受的答案可能会在屏幕上为您提供正确的输出,但是根据您对作业的描述,它甚至还没有满足作业要求,我怀疑它会是被接受为解决方案。

标签: java copy-constructor deep-copy


【解决方案1】:

我认为你的误解就在这一行:

private static double sum1 = length+width+height;

此计算将在运行时执行此行时执行,因此在加载类时(因此长度=1.0,宽度=1.0,高度=1.0)。

如果你想在设置好长宽高后计算总和,你必须把计算放在一个方法中:

public static double sum() {
    return length+width+height;
}

在你的最后一行调用这个方法:

System.out.println("Package 1: " + length + " X " + width + " X " + height + ", Volume = " + sum())

还要注意,所有变量都是静态的,因此您并没有真正将包用作对象。为简单起见,您可以删除构造函数,除非您想了解 java 对象,但您必须修改更多代码。

更新:这可行,但为了能够使用复制构造函数,我每次都必须创建 2 个对象。说到开销。 数学:不是求和,而是体积的乘积。

import java.util.Scanner;

public class Package {

    double length=1.0;
    double height=1.0;
    double width=1.0;
    double sum;
        
    public Package() {
    }
    
    public Package (Package p)
    {
        this.length = p.length;
        this.height = p.height;
        this.width = p.width;
        // to calculate the volume it's more like a product then a sum
        sum=length*height*width;
    }

    public static void main(String[] args) {
        
        Scanner input = new Scanner(System.in);
        for (int i=0;i<5;i++)
        {
            Package pack=new Package();
            
            System.out.println("Enter package dimensions.\nEnter Length: ");
            pack.length = input.nextDouble(); 
        
            System.out.println("\nEnter Width: ");
            pack.width = input.nextDouble();
        
            System.out.println("\nEnter Height: ");
            pack.height = input.nextDouble();
            
            Package p=new Package(pack);
            System.out.println("Package 1: " + p.length + " X " + p.width + " X " + p.height + ", Volume = " + p.sum);
        }
    }
}

【讨论】:

  • 对 - 所以问题之一可能是将其设置为变量? - 谢谢你!这也有帮助!
  • 非常感谢您的帮助!我相信这就是教授正在寻找的东西。你是绝对正确的 - 这是产品 - 我没有注意。
【解决方案2】:

您可以为此使用 do-while .. 如下所示

Scanner input = new Scanner(System.in);
    int i=0;
do{
        Package package =new Package();
    System.out.println("Enter package dimensions.\nEnter Length: ");
    package.length = input.nextDouble(); 

    System.out.println("\nEnter Width: ");
    package.width = input.nextDouble();

    System.out.println("\nEnter Height: ");
    package.height = input.nextDouble();



    System.out.println("Package : " + package.length + " X " + package.width + " X " + package.height + ", package.Volume = " + sum1);
i++;
}while ( i<=5);

【讨论】:

  • 我不认为这个答案是正确的:体积计算不正确。它不是总是打印Volume 3.0 不知道你输入了什么值吗?
  • 谢谢!这很有帮助,让我更步入正轨!我很感激!
  • 我试过了,效果很好。
  • @Conffusion;感谢更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 2018-05-06
相关资源
最近更新 更多