Java多类编程报错求助:Eclipse作业无参构造及跨类调用问题
编程作业问题修复
问题描述
我目前在Eclipse中完成一项编程作业时遇到了多类使用问题,大部分程序逻辑我都能实现,但在程序的无参构造部分,以及将第一个类的参数传入第二个类使用时遇到了障碍。
现有代码
第一个类:primarySetUp.java
// Preparation of the input import java.util.Scanner; public class primarySetUp { public static void main(String[] args) { // Variable Declaration double userBagNumber; double userBagWeight; // Create Scanner Scanner input = new Scanner(System.in); java.util.Date date = new java.util.Date(); // Opening Statement System.out.println("Welcome to the Coffee Sales Simulation!"); // Get User Input System.out.println("How heavy do you want the bags to be?"); userBagWeight = input.nextDouble(); System.out.println("How many bags do you want?"); userBagNumber = input.nextDouble(); // Get output // Date System.out.println("Todays date: "); System.out.printf("%tB %<te, %<tY", date); System.out.println(""); // spacer // Original Inputs System.out.printf("\nNumber of Bags: %3.0f", userBagNumber); System.out.printf("\nWeight of Each Bag: %3.2f", userBagWeight); System.out.print(" lbs"); // Calling of the Class secondarySetUp mysecondarySetUp = new secondarySetUp(userBagWeight, userBagNumber); // End Program System.out.println("\nThank you for shopping with us!"); } }
第二个类:secondarySetUp.java(报错版本)
public class secondarySetUp { // Constants static double pricePerPound = 5.99; static double taxRate = 0.0725; int singleBagger, pounderBagger; public secondarySetUp(double userBagWeight, double userBagNumber) { // A method named getTaxRate() that returns the tax rate. System.out.printf("\nPrice per Pound: $%2.2f", getPrice()); System.out.printf("\nSales Tax: $%2.2f", getTaxRate()); System.out.print(" %"); System.out.printf("\nPrice of one bag weighing one pound: %3.2f", getSale()); } // No argument pricing public Sale() { singleBagger = 1; pounderBagger = 1; } // First constructor receiving No argument pricing public Sale(int w, int n) { singleBagger = w; pounderBagger = n; } // Sale without tax public double getSale() { return userBagWeight * singleBagger * pounderBagger; } // Get Sale Tax public double getSaleTax() { return (getSale() * taxRate); } // Get total pricing public double getTotalPrice() { return (getSale() + getSaleTax()); } public double getPrice() { return pricePerPound; } public double getTaxRate() { return taxRate * 100; } }
修复方案
已识别的错误点
- 构造器命名错误:构造器名称必须和类名完全一致,原有代码中两个
Sale命名的构造器不符合要求 - 入参未持久化:构造器接收的
userBagWeight、userBagNumber参数没有保存为类的成员变量,后续方法调用时找不到对应变量 - 变量类型不匹配:
singleBagger、pounderBagger声明为int类型,和传入的double类型用户输入不匹配 - 无税金额计算逻辑缺失:
getSale()方法没有乘以单价pricePerPound,计算结果不符合业务逻辑
修复后的secondarySetUp.java代码
public class secondarySetUp { // 常量定义 static double pricePerPound = 5.99; static double taxRate = 0.0725; // 新增成员变量保存入参 private double userBagWeight; private double userBagNumber; int singleBagger, pounderBagger; // 双参构造器:接收主类传入的用户输入 public secondarySetUp(double userBagWeight, double userBagNumber) { // 保存入参到成员变量 this.userBagWeight = userBagWeight; this.userBagNumber = userBagNumber; // 默认赋值singleBagger和pounderBagger为1,也可根据需求调整 this.singleBagger = 1; this.pounderBagger = 1; // 原有打印逻辑 System.out.printf("\nPrice per Pound: $%2.2f", getPrice()); System.out.printf("\nSales Tax: %.2f", getTaxRate()); System.out.print(" %"); System.out.printf("\nPrice of one bag weighing one pound: %.2f", getSingleBagBasePrice()); // 可直接在此处添加你后续需要的打印语句,比如总金额、税费等 System.out.printf("\nTotal pre-tax cost: %.2f", getSale()); System.out.printf("\nTotal tax: %.2f", getSaleTax()); System.out.printf("\nFinal total cost: %.2f", getTotalPrice()); } // 无参构造器:将原有Sale无参构造器改名 public secondarySetUp() { this.singleBagger = 1; this.pounderBagger = 1; } // 双int参数构造器:将原有Sale双参构造器改名 public secondarySetUp(int w, int n) { this.singleBagger = w; this.pounderBagger = n; } // 新增方法:计算单磅单包的基础价格,适配你原有打印需求 public double getSingleBagBasePrice() { return pricePerPound * singleBagger * pounderBagger; } // 无税销售额计算:修复逻辑,补全单价计算 public double getSale() { return userBagWeight * userBagNumber * pricePerPound * singleBagger * pounderBagger; } // 税费计算 public double getSaleTax() { return getSale() * taxRate; } // 总金额计算 public double getTotalPrice() { return getSale() + getSaleTax(); } public double getPrice() { return pricePerPound; } public double getTaxRate() { return taxRate * 100; } }
修复说明
- 所有构造器名称已统一为
secondarySetUp,符合Java语法要求 - 新增了成员变量存储主类传入的用户输入参数,所有方法可正常调用
- 补充了单包基础价格的计算方法,适配原有打印“一磅重的单包价格”的需求
- 调整了无税金额的计算逻辑,计算结果符合实际定价规则
- 原有主类
primarySetUp的代码不需要修改,直接替换secondarySetUp类即可运行
内容的提问来源于stack exchange,提问作者Metiri Magoro
相关产品推荐
相关产品推荐

