由于出现错误,无法将 double 换成 void

Unable to swap out double for void as errors follow

如果标题非常模糊,我深表歉意,但我不完全确定如何表达它。每次我将 double 换成 void 时,我都会收到一个错误,告诉我我的程序的退出值不正确。这一切都在 CodeLab 上,所以一切都必须清晰准确。

我的任务是: 编写一个名为 class 的 GasTank,其中包含: 一个名为 amount 类型的实例变量,初始化为 0。 名为 addGas 的方法接受双精度类型的参数。 amount 实例变量的值随着参数的值而增加。 一个名为 useGas 的方法,它接受一个双精度类型的参数。数量的值减少了参数的值。但是,如果 amount 的值减小到 0 以下,则 amount 设置为 0。 名为 isEmpty 的方法不接受任何参数。 isEmpty returns 布尔值:如果 amount 的值小于 0.1,则为 true,否则为 false。 名为 getGasLevel 的方法不接受任何参数。 getGasLevel returns amount 实例变量的值。

public class GasTank {
    private double amount=0;

    public double addGas(double addg){
        amount=amount+addg;
        if(amount>0.1){
            amount=0;

        }

    }

    public void useGas(double useg){
        amount=amount-useg;
        if(amount<0){
            amount=0;
        }
    }

    public boolean isEmpty(){
        if(amount<0.1){
            return true;
        }
        return false;
    }

    public double getGasLevel(){
        return amount;
    }
}

Error

让我们来调试您的代码:我们一步一步地检查它,弄清楚应该发生什么。通过 运行 代码仔细检查您的工作。使用调试器来观察计算机正在做什么。如果您懒得学习如何使用它,那么 println 语句是一个蹩脚的替代品,但对于初学者来说已经足够好了:

public double addGas(double addg){
        amount=amount+addg;
        if(amount>0.1){
            amount=0;

        }

    }

所以,我们获取 amount 字段,按照指定的方式向其中添加 gas..

然后如果金额高于 0.1,我们将其设置回 0

因此,如图所示,检查器代码增加了 78 加仑,因为它大于 0.1,您的代码会将 amount 设置为 78.0,然后立即将其设置回 0.0。我不知道你为什么添加那行,但计算机只是按照计算机的指示进行操作。你告诉它做的事情没有完成任务。之后该字段应该是 78.0。

我完全不知道你在做什么:

Unable to swap out double for void as errors follow

但是整个 'I reset amount down to 0 if you try to add more than a tenth of a gallon' 问题是您的代码的唯一问题。

我帮你修好了。查看评论中的注释

public class GasTank {
   private double amount=0;
   private double v;
   
   //Constructor
   public GasTank(double a){
      v = a;
   }
      
    //Changed to void, we aren't returning a double val  
   public void addGas(double addg){
       amount=amount+addg;
      
       //changed your if statement
      if(amount>v){
         amount = v;
      }
   }

   public void useGas(double useg){
      amount=amount-useg;
      if(amount<0){
         amount=0;
      }
   }

   public boolean isEmpty(){
      if(amount<0.1){
         return true;
      }
        //added else statement here
      else{
         return false;
      }
   }

   public double getGasLevel(){
      return amount;
   }
}