如何制作几种不同的条件Java

时间:2014-05-09 22:27:26

标签: java

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;
}

4 个答案:

答案 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'语句之前的{},所有内容都应该包含在一个块中,这可能会改变并解决您的问题!