Java - 变量可能未初始化

时间:2016-01-11 21:27:41

标签: 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;
}​

5 个答案:

答案 0 :(得分:2)

由于您没有提供收入大于406751且没有其他情况的情况,因此您可以在没有初始化tax的情况下达到return语句。正如已经建议的那样,将其初始化为某些默认值(如0.0)应该会有所帮助,即使您知道它永远不会被使用。

答案 1 :(得分:1)

income的值不会导致设置tax,例如406751以上的任何值或9075以下的任何值。

除了将税的初始值设置为0.0之外,您的代码还可以简化:

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

答案 2 :(得分:1)

您必须声明并初始化变量&#34; tax&#34;。由于它是一个双精度型,你可以给它一个零值,比如;

double tax = 0.0;

答案 3 :(得分:1)

因此您的代码存在一些问题。在我继续向您展示正确的版本之前,我将尝试向您解释为什么会出现此错误。如果您使用以下形式的结构:

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

你实际上并不认为x未被初始化(在Java中意味着x将 null )。所以你可能会返回null。要避免此问题,您可以在开头将变量税设置为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
}

你注意到它看起来比你的代码更干净。和&amp;&amp;我用过的运算符基本上是指<​​em>和。因此,只有当两个语句都为真时,才会输入if块的主体。在您的情况下,这可以让您显着缩短代码。

除此之外,我还有一个问题:收入必须是属性吗?我不知道整个班级的样子,但把收入作为争论的方式对我来说似乎更合理。

答案 4 :(得分:0)

尝试像这样初始化它:

double tax = 0.0;