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 它。
这是我正在学习的入门编程 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 它。