如何根据 Java 中的布尔值答案更改 set 方法中的值?
How can I change a value in a set method depending on a boolean's answer in Java?
我正在尝试根据商品是否为奢侈品更改增值税税率。
我试过在我的 set 方法中使用 if,但它只使用我给它的预设值。
private double vat = 0.08;
是我的预设值。我的获取和设置方法是:
public double getVat() {
return this.vat;
}
public void setVat(double vat) {
if(lux=true) {
this.vat = 0.10;
}
else if(lux=false) {
this.vat = vat;
}
}
变量lux
是
private boolean lux;
此外,这是我的构造函数的样子:
public ProductTest(String pname, double price, boolean lux) {
this.pname = pname;
if(price>0) {
this.price = price;
}
else {
this.price = 0;
}
this.lux = lux; //If product type is luxury , =true ----- if product type is not luxury, =false
}
当我创建并反对 lux
变量并将其标记为 true 或 false 时,VAT 取值 0.08。
ProductTest p = new ProductTest("apple", 10, true);
System.out.println(p.getVat());
输出:0.08
ProductTest p = new ProductTest("apple", 10, false);
System.out.println(p.getVat());
输出:0.08
我该怎么做才能克服这个问题?谢谢。
您应该按如下方式编写 setVat
方法:
public void setPrice(double vat) {
//Setting vat to 0.10 if it's a luxury product
if (lux) {
this.vat = 0.10;
} else {
//Setting the given vat if it's a consistent value
if (vat > 0) {
this.vat = vat;
}
}
}
这将确保您的两个逻辑:
- 如果该商品是奢侈品,则其增值税必须是
0.10
,无论通过了什么
- 如果 vat 是一个一致的正值,那么它可以分配给对象的字段。
在您的方法中,您应该通过简单地将 lux
放在 if
括号内来检查 lux
是否为真。不需要检查 lux 是否等于 true,一个布尔值已经代表了比较的结果。此外,正如其他人在评论中指出的那样,要执行比较,您需要使用 ==
运算符,而不是 =
,后者表示赋值。
此外,您应该按照我在上面向您展示的那样集中您的 vat 设置逻辑。在你的 setter 方法中,你只检查了产品是否是奢侈品,而没有确保给定的值是一致的。您应该在 setter 方法中包含这两种逻辑,以集中它并避免代码重复,并在构造函数中调用 setter 。首先,分配产品名称、价格和 lux
标志,然后通过调用 setVat
方法设置增值税值。
public class ProductTest {
private String pname;
private double price;
private double vat = 0.08;
private boolean lux;
public ProductTest(String pname, double price, boolean lux) {
this.pname = pname;
//Alternatively you could also define a price setter with the following logic and invoke it
this.price = price > 0 ? price : 0;
this.lux = lux; //If product type is luxury , =true ----- if product type is not luxury, =false
setVat(vat);
}
public double getVat() {
return this.vet;
}
public void setVat(double vat) {
if (lux) {
this.vat = 0.10;
} else {
if (vat > 0) {
this.vat = vat;
}
}
}
@Override
public String toString() {
return String.format("%s at %g with %g vat is%s luxury", pname, price, vat, lux ? "" : " not");
}
public static void main(String[] args) {
ProductTest pt1 = new ProductTest("test1", 0.50, true);
System.out.println(pt1);
ProductTest pt2 = new ProductTest("test2", 0.05, false);
System.out.println(pt2);
}
}
您需要在构造函数中调用 setVat
以应用逻辑
public ProductTest(String pname, double price, boolean lux) {
this.pname = pname;
this.price = Math.max(0, price);
this.lux = lux;
setVat(vat);
}
public void setVat(double vat) {
if (lux) {
this.vat = 0.10;
} else {
this.vat = vat;
}
}
使用三元运算符甚至可以更短
public void setVat(double vat) {
this.vat = lux ? 0.10 : vat;
}
或者通过将逻辑放在 getVat
中来做不同的事情
public ProductTest(String pname, double price, boolean lux) {
this.pname = pname;
this.price = Math.max(0, price);
this.lux = lux;
}
public double getVat() {
return lux ? 0.10 : vat;
}
public void setVat(double vat) {
this.vat = vat;
}
我正在尝试根据商品是否为奢侈品更改增值税税率。
我试过在我的 set 方法中使用 if,但它只使用我给它的预设值。
private double vat = 0.08;
是我的预设值。我的获取和设置方法是:
public double getVat() {
return this.vat;
}
public void setVat(double vat) {
if(lux=true) {
this.vat = 0.10;
}
else if(lux=false) {
this.vat = vat;
}
}
变量lux
是
private boolean lux;
此外,这是我的构造函数的样子:
public ProductTest(String pname, double price, boolean lux) {
this.pname = pname;
if(price>0) {
this.price = price;
}
else {
this.price = 0;
}
this.lux = lux; //If product type is luxury , =true ----- if product type is not luxury, =false
}
当我创建并反对 lux
变量并将其标记为 true 或 false 时,VAT 取值 0.08。
ProductTest p = new ProductTest("apple", 10, true);
System.out.println(p.getVat());
输出:0.08
ProductTest p = new ProductTest("apple", 10, false);
System.out.println(p.getVat());
输出:0.08
我该怎么做才能克服这个问题?谢谢。
您应该按如下方式编写 setVat
方法:
public void setPrice(double vat) {
//Setting vat to 0.10 if it's a luxury product
if (lux) {
this.vat = 0.10;
} else {
//Setting the given vat if it's a consistent value
if (vat > 0) {
this.vat = vat;
}
}
}
这将确保您的两个逻辑:
- 如果该商品是奢侈品,则其增值税必须是
0.10
,无论通过了什么 - 如果 vat 是一个一致的正值,那么它可以分配给对象的字段。
在您的方法中,您应该通过简单地将 lux
放在 if
括号内来检查 lux
是否为真。不需要检查 lux 是否等于 true,一个布尔值已经代表了比较的结果。此外,正如其他人在评论中指出的那样,要执行比较,您需要使用 ==
运算符,而不是 =
,后者表示赋值。
此外,您应该按照我在上面向您展示的那样集中您的 vat 设置逻辑。在你的 setter 方法中,你只检查了产品是否是奢侈品,而没有确保给定的值是一致的。您应该在 setter 方法中包含这两种逻辑,以集中它并避免代码重复,并在构造函数中调用 setter 。首先,分配产品名称、价格和 lux
标志,然后通过调用 setVat
方法设置增值税值。
public class ProductTest {
private String pname;
private double price;
private double vat = 0.08;
private boolean lux;
public ProductTest(String pname, double price, boolean lux) {
this.pname = pname;
//Alternatively you could also define a price setter with the following logic and invoke it
this.price = price > 0 ? price : 0;
this.lux = lux; //If product type is luxury , =true ----- if product type is not luxury, =false
setVat(vat);
}
public double getVat() {
return this.vet;
}
public void setVat(double vat) {
if (lux) {
this.vat = 0.10;
} else {
if (vat > 0) {
this.vat = vat;
}
}
}
@Override
public String toString() {
return String.format("%s at %g with %g vat is%s luxury", pname, price, vat, lux ? "" : " not");
}
public static void main(String[] args) {
ProductTest pt1 = new ProductTest("test1", 0.50, true);
System.out.println(pt1);
ProductTest pt2 = new ProductTest("test2", 0.05, false);
System.out.println(pt2);
}
}
您需要在构造函数中调用 setVat
以应用逻辑
public ProductTest(String pname, double price, boolean lux) {
this.pname = pname;
this.price = Math.max(0, price);
this.lux = lux;
setVat(vat);
}
public void setVat(double vat) {
if (lux) {
this.vat = 0.10;
} else {
this.vat = vat;
}
}
使用三元运算符甚至可以更短
public void setVat(double vat) {
this.vat = lux ? 0.10 : vat;
}
或者通过将逻辑放在 getVat
public ProductTest(String pname, double price, boolean lux) {
this.pname = pname;
this.price = Math.max(0, price);
this.lux = lux;
}
public double getVat() {
return lux ? 0.10 : vat;
}
public void setVat(double vat) {
this.vat = vat;
}