Java-Setters和继承-为什么我的dailyFee参数设置不正确?

Java-Setters和继承-为什么我的dailyFee参数设置不正确?,java,Java,大家晚上好 作业越来越混乱了!再次强调,不要要求一个直截了当的答案,而是一个指向正确方向的指针,这样任何帮助都会得到感谢 编辑2:下面是有问题的练习,如果它有助于澄清任何问题: 我想知道如何使用UseCarRental.java文件在CarRental.java文件中设置dailyFee变量。java中的if语句似乎工作不正常(输入size没有设置dailyFee变量)。此外,如果输入“l”作为大小,则不会提示输入LuxuryCarRental.java。代码如下: CarRental.jav

大家晚上好

作业越来越混乱了!再次强调,不要要求一个直截了当的答案,而是一个指向正确方向的指针,这样任何帮助都会得到感谢

编辑2:下面是有问题的练习,如果它有助于澄清任何问题:

我想知道如何使用UseCarRental.java文件在CarRental.java文件中设置dailyFee变量。java中的if语句似乎工作不正常(输入size没有设置dailyFee变量)。此外,如果输入“l”作为大小,则不会提示输入LuxuryCarRental.java。代码如下:

CarRental.java

import javax.swing.JOptionPane;

public class CarRental 
{
private String name;
private String zipCode;
private String size;
private double dailyFee;
private int rentalDays;
private double totalFee;

public CarRental(String name, String zipCode, String size, double dailyFee, int rentalDays, double totalFee)
{
    this.name = name;
    this.zipCode = zipCode;
    this.size = size;
    if (size == "e")
    {
        this.dailyFee = 29.99;
    }
    else if (size == "m")
    {
        this.dailyFee = 38.99;
    }
    else if (size == "f")
    {
        this.dailyFee = 43.50;
    }
    this.dailyFee = dailyFee;
    this.rentalDays = rentalDays;
    totalFee = dailyFee * rentalDays;
}

public CarRental(){}

public void display()
{
    JOptionPane.showMessageDialog(null, "Luxury car for " + name + " from zip code " + zipCode + "\n"
            + "Type = " + size + "\n"
            + "Daily Fee = " + dailyFee + "\n"
            + "Days = " + rentalDays + "\n"
            + "Your rental is $" + totalFee);
}

//includes getters and setters but I didn't include them in this post
import javax.swing.JOptionPane;

public class LuxuryCarRental extends CarRental
{
    public LuxuryCarRental(String name, String zipCode, String size, double dailyFee, int rentalDays, double totalFee, String includeChauffeur)
    {
        super(name, zipCode, size, dailyFee, rentalDays, totalFee);
        if (size == "l")
        {
            dailyFee = 79.99;
            includeChauffeur = JOptionPane.showInputDialog(null, "Include chauffeur? Y/N");
            if (includeChauffeur == "Y")
            {
                totalFee = totalFee + 200;
            }
        }
    }
}
LuxuryCarRental.java

import javax.swing.JOptionPane;

public class CarRental 
{
private String name;
private String zipCode;
private String size;
private double dailyFee;
private int rentalDays;
private double totalFee;

public CarRental(String name, String zipCode, String size, double dailyFee, int rentalDays, double totalFee)
{
    this.name = name;
    this.zipCode = zipCode;
    this.size = size;
    if (size == "e")
    {
        this.dailyFee = 29.99;
    }
    else if (size == "m")
    {
        this.dailyFee = 38.99;
    }
    else if (size == "f")
    {
        this.dailyFee = 43.50;
    }
    this.dailyFee = dailyFee;
    this.rentalDays = rentalDays;
    totalFee = dailyFee * rentalDays;
}

public CarRental(){}

public void display()
{
    JOptionPane.showMessageDialog(null, "Luxury car for " + name + " from zip code " + zipCode + "\n"
            + "Type = " + size + "\n"
            + "Daily Fee = " + dailyFee + "\n"
            + "Days = " + rentalDays + "\n"
            + "Your rental is $" + totalFee);
}

//includes getters and setters but I didn't include them in this post
import javax.swing.JOptionPane;

public class LuxuryCarRental extends CarRental
{
    public LuxuryCarRental(String name, String zipCode, String size, double dailyFee, int rentalDays, double totalFee, String includeChauffeur)
    {
        super(name, zipCode, size, dailyFee, rentalDays, totalFee);
        if (size == "l")
        {
            dailyFee = 79.99;
            includeChauffeur = JOptionPane.showInputDialog(null, "Include chauffeur? Y/N");
            if (includeChauffeur == "Y")
            {
                totalFee = totalFee + 200;
            }
        }
    }
}
UseCarRental.java(不完整)

如您所见,我完全不知道如何使用UseCarRental.java中的setDailyFee来设置dailyFee变量,这是进行totalFee计算所需的

编辑:被要求解释为什么这不是一个重复的问题。我修复了字符串比较问题(这里还没有更新),但核心问题仍然是setter和继承


编辑3:我想本世纪的问题(为了清楚起见)是:我如何设置每日费用的价值?我认为一旦输入了大小,它将由CarRental.java中的if语句设置?

您在这里遇到了一些问题:

  • CarRental
    构造函数中,您根据
    大小设置
    this.dailyFee
    ,然后用参数值覆盖它。您应该删除该参数,或者在构造函数中没有该逻辑

  • dailyFee
    字段是
    CarRental
    的私有字段,这意味着在
    LuxuryCarRental
    中无法直接访问该字段
    LuxuryCarRental
    应该使用
    this.setDailyFee()

  • 在构造函数中放置对话框之类的交互是不好的代码。它将用于此任务,但不要在实际代码中使用它。将接口和数据类分开

  • 你似乎误解了遗产是如何运作的。您可以在
    main
    中创建
    CarRental
    对象,但用于处理
    l
    的代码仅存在于
    LuxuryCarRental
    中。您需要无条件地创建一个
    LuxuryCarRental
    (您仍然可以将其分配给
    CarRental
    变量),或者输入租赁类型,并根据租赁类型创建一个
    CarRental
    LuxuryCarRental
    。请注意,
    CarRental
    有一个默认(无参数)构造函数,而
    LuxuryCarRental
    没有

除了修复字符串比较之外,我的总体建议是:将所有问题移到
main
方法中,并将它们的值分配给局部变量。在调用新LuxuryCarRental时使用这些值(姓名、zipCode、尺码、租金日,包括司机)
(请注意,
dailyFee
是根据
size
计算的,
totalFee
是根据日费、天数和司机计算的)。不要将
totalFee
作为
CarRental
上的变量,而是将
getTotalFee()
作为调用时执行计算的方法,因为只要更改任何其他参数,费用都会更改


(尽可能了解枚举;
size
首先不应该是字符串。)

这是一个导致问题,但不是核心问题。使用
CarRental userInfo=new LuxuryCarRental()而不是
CarRental userInfo=new CarRental()如果(size.equals(“e”)对我也不起作用。@BilalShah我还需要添加其他内容吗?仍然像以前一样工作。恐怕我不太明白。我应该把dailyFee逻辑放在哪里?我需要根据它的大小来确定。为什么逻辑一开始就不起作用?