在Java中将布尔信息从一个类传递到另一个类

在Java中将布尔信息从一个类传递到另一个类,java,Java,晚上好 我有两门课——汽车课和入口点课。有第三个类用于获取名称数据,但这没有问题,因此我在这个问题中省略了它 我的问题是,我需要确定车主的车是否有一个大于某个值的大油箱。如果是这样,我想输出“低效燃油使用”。如果油箱尺寸低于所述值,我希望它输出“良好的油耗”。如果油箱大小是一个特定值,我希望它输出“平均消耗”。不过,没有问题,我得到了一个堆栈溢出错误,我无法理解我的代码哪里是错误的。请告知 下面是这两个类的完整源代码 // instance variables private String mo

晚上好

我有两门课——汽车课和入口点课。有第三个类用于获取名称数据,但这没有问题,因此我在这个问题中省略了它

我的问题是,我需要确定车主的车是否有一个大于某个值的大油箱。如果是这样,我想输出“低效燃油使用”。如果油箱尺寸低于所述值,我希望它输出“良好的油耗”。如果油箱大小是一个特定值,我希望它输出“平均消耗”。不过,没有问题,我得到了一个堆栈溢出错误,我无法理解我的代码哪里是错误的。请告知

下面是这两个类的完整源代码

// instance variables
private String model;
private int tankSize;
private double manfMPG;
private String ownerName;

public boolean tankBigger;


public void setBiggerTank(boolean hasBiggerTank) {
    this.tankBigger = hasBiggerTank;
}

// there are 0.22 gallons per litre
final double GPL = 0.22;


// parameterised constructor
public Car(String m, int t, double mpg, String owner)
{
    model = m;
    tankSize = t;
    manfMPG = mpg;
    ownerName = owner;
}

// default constructor
public Car()
{
    model = "";
    tankSize = 0;
    manfMPG = 0.0;
    ownerName = "";
}

// setters and getters
public String getModel() {
    return model;
}

public void setModel(String model) {
    this.model = model;
}

public int getTankSize() {
    return tankSize;
}

public void setTankSize(int tankSize) {
    this.tankSize = tankSize;
    
}

public double getManfMPG() {
    return manfMPG;
}

public void setManfMPG(double manfMPG) {
    this.manfMPG = manfMPG;
}

public double getEstimateDistance() {
    // there are 0.22 gallons per litre
    return tankSize * manfMPG * GPL;
}

public boolean hasBiggerTank() {
    
    if (tankSize >= 4) {
        System.out.println("inefficient fuel use");
    }
    else if (tankSize <= 2) {
        System.out.println("good fuel consumption");
    }
    else {
        System.out.println("Average consumer");
    }
    return hasBiggerTank();
}

}

问题是由
hasBiggerTank
方法引起的。它以调用自身结束,这将导致无休止的循环,最终将导致堆栈溢出


您可以返回
true
(或
false
),但由于此方法所做的唯一事情是登录到控制台,因此我建议将此方法的返回类型更改为void。这样,您根本不必返回任何内容。

return hasBiggerTank()永远递归地调用自己。好吧,至少在堆栈溢出之前是这样。一般来说,避免副作用是像问题一样命名的方法。
public static void main(String [] args) {
    
    Car car1 = new Car();
    car1.setModel("Ferrari");
    car1.setTankSize(4);
    car1.setManfMPG(4);
    
    Name name1 = new Name("Kieran ", "David ", "Nock "); 
            
    System.out.println("Car 1 Model: " + car1.getModel());
    System.out.println("Car 1 tank size: " + car1.getTankSize());
    System.out.println("Car 1 ManfMPG: " + car1.getManfMPG());
    System.out.println("Car 1 estimated distance: " + car1.getEstimateDistance());
    System.out.println("Car 1 efficiency: " + (car1.hasBiggerTank() ? "inefficient fuel use" : "good fuel consumption"));
    System.out.println("Car 1 owner: " + name1.getFirstName() + name1.getMiddleName() + name1.getSurname());
    System.out.println("Car 1 owner sn: " + name1.getSurname());
    System.out.println("car 1 owner sn, fn: " + name1.getLastCommaFirst());
                
            
}