You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:36:04