由于出现错误,无法将 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;
}
}
如果标题非常模糊,我深表歉意,但我不完全确定如何表达它。每次我将 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;
}
}