2016-01-11 142 views
0

好吧,无论我尝试什么,该程序都不起作用,它只是一直说变量税可能未初始化。我可以拥有的唯一属性是收入,所以我无法在此代码上面申报税收。我发现代码实际上可以编译,如果我这样做,显然这会导致陈旧的数据,所以这是没用的。请帮忙!!Java - 变量可能未初始化

​public double getTaxRate() 
{ 
    double tax; 
    if(income == 406751) 
     tax = 39.6; 
    else if(income <= 406750) 
     if(income > 405100) 
      tax = 35; 
     else if(income <= 405100) 
      if(income > 106350) 
       tax = 33; 
      else if(income <= 106350) 
       if(income > 89530) 
        tax = 28; 
       else if(income <= 89350) 
        if(income > 36900) 
         tax = 25; 
        else if(income <= 36900) 
         if(income > 9075) 
          tax = 15; 
         else if(income == 9075) 
          tax = 10; 
    return tax; 
}​ 
+0

我不知道为什么这个问题被标记下来。这是一个合理的问题,他们似乎试图自行解决。如果我们把问题标记为“因为这很简单”,没有人会问任何问题。 – slipperyseal

+2

这是一个很好的例子,说明为什么''''''''应该总是用于'if else'块。 – Jason

+1

你应该真的接受[Jason](http://stackoverflow.com/a/34731658/1700321)或[Jacob](http://stackoverflow.com/a/34731498/1700321)回答。 –

回答

0

尝试初始化它是这样的:

double tax = 0.0; 
2

因为你如果收入低于406751更大提供任何情况下,并没有很可能其他情况下,你可以而没有到达return语句已初始化tax。正如已经提出的,即使你知道它永远不会被使用,将它初始化为一些默认值(如0.0)也应该有所帮助。

+0

另外,如果收入<9075,价值将不会被初始化。 – Jason

1

有诸如以上406751的任何值或低于9075

任何值除了设置税为0.0的初始值对于income值不引起tax被设置,您的代码可以是简化:

public double getTaxRate() 
{ 
    double tax = 0.0; 
    if(income == 406751) 
     tax = 39.6; 
    else if(income <= 406750) 
     if(income > 405100) 
      tax = 35; 
     else if(income > 106350) 
      tax = 33; 
     else if(income > 89530) 
      tax = 28; 
     else if(income > 36900) 
      tax = 25; 
     else if(income > 9075) 
      tax = 15; 
     else if(income == 9075) 
      tax = 10; 

    return tax; 
}​ 

它通常是更清晰的使用{和},使其明显被用于if语句的真或假的情况下执行该代码:

public double getTaxRate() 
{ 
    double tax = 0.0; 
    if(income == 406751) { 
     tax = 39.6; 
    } else if(income <= 406750) { 
     if(income > 405100) { 
      tax = 35; 
     } else if(income > 106350) { 
      tax = 33; 
     } else if(income > 89530) { 
      tax = 28; 
     } else if(income > 36900) { 
      tax = 25; 
     } else if(income > 9075) { 
      tax = 15; 
     } else if(income == 9075) { 
      tax = 10; 
     } 
    } 
    return tax; 
}​ 
1

您必须声明和初始化变量“tax”。既然它是双重的,你可以给它一个零值,就像;

double tax = 0.0; 
1

所以你的代码有几个问题。在我继续向您展示正确的版本之前,我会尝试向您解释为何发生此错误。如果您使用以下形式的构造:

if (x > somenumber) { 
    // do something 
} else if (x <= somenumber) { 
    // do something else 
} 

你居然不考虑的情况下X为未初始化(这在Java中意味着x是)。所以有可能你会返回null。为了避免这个问题,你可以在开始时将变量tax设置为0。基本上这意味着如果收入未初始化(或者与您的if语句不匹配,例如收入为2),您将返回0。

此外,您的代码是可怕的阅读。考虑在未来增加一些额外的税收案例,你的方法将变得越来越宽。除此之外,您可能还想使用{和}来构造if语句的正文,如前所述。

public double getTaxRate() { 
    double tax = 0; // could also been set to 0.0 since it's a double 

    if (income == 406751) { 
     tax = 39.6; 
    } else if (income <= 406750 && income > 405100) { 
     tax = 35; 
    } else if (income <= 405100 && income > 106350) { 
     tax = 33; 
    } else if (income <= 106350 && income > 89530) { 
     tax = 28; 
    } else if (income <= 89530 && income > 36900) { 
     tax = 25; 
    } else if (income <= 36900 && income > 9075) { 
     tax = 15; 
    } else if (income == 9075) { 
     tax = 10; 
    } 

    return tax; // if income is lower than 9075 it will return 0 
} 

你注意到了这看起来比你的代码更干净。我使用的运营商基本上是。所以只有当两个语句都是真的,if块的主体才会被输入。在你的情况下,这可以让你显着缩短你的代码。

除此之外,我还有一个问题:收入必须是的一个属性吗?我不知道整个班级是什么样子,但我认为把收入作为一种方法的论据似乎更合理。