If条件不起作用总是交易补贴= 3,250.00我需要它取决于州和车年。我附上了我的代码和更多解释。
以旧换新免税额取决于车辆的制造年份以及首次购买时的登记状态。 FHM不接受1990年早些时候制造的车辆以旧换新补贴。适用于
之间制造的车辆1990年和1999年,最初在伊利诺伊州,印第安纳州,爱荷华州,堪萨斯州,密歇根州,明尼苏达州,密苏里州或内布拉斯加州注册,折价为3000.00美元,其他州为2750.00美元。
对于2000年至2009年间生产并最初在伊利诺伊州,印第安纳州,爱荷华州,堪萨斯州,密歇根州,明尼苏达州,密苏里州,内布拉斯加州,北达科他州,俄亥俄州,南达科他州或威斯康星州注册的车辆,以旧换新补贴为3250.00美元其他州则是$ 3000.00。
对于2010年及之后生产的车辆,无论初始登记状态如何,以旧换新金额为$ 5000.00。
if (vehiclesYear <= 1999 || vehiclesYear >= 1990
& (stateNames.getSelectedItem() == "IL")
|| (stateNames.getSelectedItem() == "IN")
|| (stateNames.getSelectedItem() == "IA")
|| (stateNames.getSelectedItem() == "KS")
|| (stateNames.getSelectedItem() == "MI")
|| (stateNames.getSelectedItem() == "MN")
|| (stateNames.getSelectedItem() == "MO")
|| (stateNames.getSelectedItem() == "NE")) {
tradeIn = 3000.00;
} else {
tradeIn = 2750.00;
}
if (vehiclesYear >= 2000
& (stateNames.getSelectedItem() == "IL")
|| (stateNames.getSelectedItem() == "IN")
|| (stateNames.getSelectedItem() == "IA")
|| (stateNames.getSelectedItem() == "KS")
|| (stateNames.getSelectedItem() == "MI")
|| (stateNames.getSelectedItem() == "MN")
|| (stateNames.getSelectedItem() == "MO")
|| (stateNames.getSelectedItem() == "NE")
|| (stateNames.getSelectedItem() == "ND")
|| (stateNames.getSelectedItem() == "OH")
|| (stateNames.getSelectedItem() == "SD")
|| (stateNames.getSelectedItem() == "WI")) {
tradeIn = 3250.00;
} else {
tradeIn = 3000.00;
}
if (vehiclesYear >= 2010) {
tradeIn = 5000.00;
}
答案 0 :(得分:2)
一个主要问题是你使用==运算符比较字符串,这不能保证给出预期的结果。
在Java中,字符串是对象,==运算符比较对象相等性。 所以如果我这样做
String myString = "Foo";
if (myString == "Foo") {
System.out.println("They are the same");
} else {
System.out.println("They are not the same");
}
结果无法保证。要比较字符串的相等性,请使用String.equals(String)
方法。
在更具风格的说明中,我可能会将状态代码插入到单独的Set<String>
实例中,如下所示:
private bool isInTheNineties(int year) {
return year >= 1990 && year <= 1999;
}
private double getTradeIn(int vehiclesYear, SomeClass stateNames) {
Set<String> s0 = new HashSet<>();
s0.addAll(Arrays.asList("IL", ... , "NE"));
String registrarState = stateNames.getSelectedItem();
if (isInTheNineties(vehiclesYear)) {
if (s0.contains(registrarState)) {
return 3000.00;
} else {
return 2750.00;
}
}
// And so on for the 2000s
}
此外,Why not use Double or Float to represent currency?问题似乎与此相关。
答案 1 :(得分:1)
让我们一起浏览您的代码。
如果您想要检查之间
更改
if (vehiclesYear <= 1999 || vehiclesYear >= 1990)
到
if (vehiclesYear <= 1999 && vehiclesYear >= 1990)
我还建议您定义String
变量并将其分配给stateNames.getSelectedItem()
像
String item = stateNames.getSelectedItem();
并使用此item
进行比较
同样因为它是一个字符串我建议您使用.equals()
方法进行比较而不是==
以避免引用比较问题
同样为了比较,您可以使用switch(item)
实现方法java 7及更高版本将支持相同的
像
switch (item)
{
case "IL":
case "IN":
.
.
case "KS":
return true;//or do something here
break;
}
答案 2 :(得分:0)
目前任何一年都满足以下条件:
if (vehiclesYear <= 1999 || vehiclesYear >= 1990)
这是因为每年都是在1999年之前或1990年以后。
如果您想要1999年到1990年之间的年份,那么您需要这样做:
if (vehiclesYear <= 1999 && vehiclesYear >= 1990)
答案 3 :(得分:-1)
我对此并不完全确定,但你可能不得不把“tradein = 3000.00;”在一个街区内让它解决问题。 {}'语句之后和'else'语句之前的{},所有内容都应该包含在一个块中,这可能会改变并解决您的问题!