Java中的if(boolean)不可达语句

时间:2016-02-20 17:58:35

标签: java if-statement unreachable-statement

这是我正在参加的一个介绍编程课程。我创建了一个Instance方法来向总计中添加newValue。 它在方法中有两个参数: (标明金额类型和金额的字母) 我在第一个参数上取得了成功。 第二是让我挣扎。我想我们是if声明。我这样做了有数量类型,然后我有三个字母可供使用,这可能是真的。我设置if(amountType == false),编译器说它是一个"无法访问的语句"。 if语句的标准是"如果该数量的字母无效(即不是T,D或E),则抛出IllegalArgumentException,并将消息返回给用户。

public double newValue(boolean amountType, double amount)
{
  boolean T = amountType;
  boolean D = amountType;
  boolean E = amountType;


    if (amount < 0) 
    {
  throw new IllegalArgumentException("The amount needs to be 0 or larger");
    }
    return amount;



    if(amountType == false)
        // if not D, E, T.....then exception
    {
        throw new IllegalArgumentException("That is an invalid letter value. "
                + "The data will be ignored");
    } 
    else
    {
    }
}    

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:2)

您的return声明正在阻碍:一旦执行,之后落下的任何代码都将无法执行。它必须是在您的方法中执行的最后一条指令(不是字面意思)。你可以这样做:

public double newValue(boolean amountType, double amount) {
    boolean T = amountType;
    boolean D = amountType;
    boolean E = amountType;


    if (amount < 0) // Eliminate constraint 1
        throw new IllegalArgumentException("The amount needs to be 0 or larger");

    if (!amountType) // Eliminate constraint 2
        throw new IllegalArgumentException("That is an invalid letter value. "
                + "The data will be ignored");

    // Do your processing, now that you passed all tests

    return amount;
}

答案 1 :(得分:1)

您必须将return amount放在第一个if块中。

原因是,如果第一个if条件为true,则会抛出异常。如果评估为false,则会执行return amount

在这两种情况下,永远不会执行第二个if

答案 2 :(得分:0)

无法访问意味着在此方法中永远无法访问该行。 因为你添加了return语句而没有if语句,你的第二个if语句永远不会被程序执行。 所以在你的第一个if语句中移动return语句,它会起作用。

答案 3 :(得分:0)

您有一个返回金额对帐单,它始终执行,后面的代码,即if语句无法访问,因为控件始终从返回金额返回。 一种可能的解决方案是首先必须检查金额类型,然后在其他部分检查金额&lt; 0语句和结束返回它。