Java 中的 if (boolean)unreachable 语句

if (boolean)unreachable statement in Java

这是我正在学习的入门编程 class。我创建了一个实例方法来将 newValue 添加到总数中。 它在方法中有两个参数: (标识金额类型和金额的字母) 我在第一个参数上成功了。 第二是让我挣扎。我假设我们有一个 if 语句。我做到了,所以有数量类型,然后我有三个字母可以是真实的。我设置了 if(amountType == false),编译器说它是 "unreachable statement"。 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
    {
    }
}    

如有任何帮助,我们将不胜感激。

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

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

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

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

Unreachable 表示此方法永远无法到达该行。 因为你在没有 if 语句的情况下添加 return 语句,所以你的第二个 if 语句永远不会被程序执行。 因此,在您的第一个 if 语句中移动 return 语句,它将起作用。

你有一个 return amount 语句,它总是执行它后面的代码,即 if 语句不可访问,因为控件总是 return 来自 return amount。 一种可能的解决方案是首先您必须检查金额类型,然后在 else 部分检查金额 < 0 语句并结束 return 它。