Java中的if(布尔)不可访问语句
这是我参加的一个编程入门课程。我创建了一个实例方法,将Java中的if(布尔)不可访问语句,java,if-statement,unreachable-statement,Java,If Statement,Unreachable Statement,这是我参加的一个编程入门课程。我创建了一个实例方法,将newValue添加到总计中。 该方法中有两个参数: (标识金额类型和金额的字母) 我在第一个参数上成功了。 第二是让我挣扎。我想给我们一个if语句。我做了,所以有金额类型,然后我有三个字母将被使用,可以是真实的。我设置了if(amountType==false),编译器说这是一个“不可访问的语句”。 if语句的条件是“如果金额的字母无效(即不是T、D或e),抛出IllegalArgumentException,并将消息返回给用户 publi
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
{
}
}
public double newValue(boolean amountType,double amount)
{
布尔T=数量类型;
布尔D=数量类型;
布尔值E=数量类型;
如果(金额<0)
{
抛出新的IllegalArgumentException(“金额需要为0或更大”);
}
退货金额;
如果(amountType==false)
//如果不是D、E、T……则为例外
{
抛出新的IllegalArgumentException(“这是一个无效的字母值。”
+“数据将被忽略”);
}
其他的
{
}
}
任何帮助都将不胜感激。您必须将
退货金额
放入第一个if
块中
原因是,如果第一个if
条件为true
,将引发异常。如果评估为false
,则将执行返回金额
在这两种情况下,第二个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;
}
public double newValue(boolean amountType,double amount){
布尔T=数量类型;
布尔D=数量类型;
布尔值E=数量类型;
if(amount<0)//消除约束1
抛出新的IllegalArgumentException(“金额需要为0或更大”);
if(!amountType)//消除约束2
抛出新的IllegalArgumentException(“这是一个无效的字母值。”
+“数据将被忽略”);
//现在您通过了所有测试,请进行处理
退货金额;
}
不可到达意味着此方法永远无法到达该行。
因为添加的返回语句没有if语句,所以程序永远无法执行第二条if语句。
所以在第一个if语句中移动return语句,它就会工作。您有一个return amount语句,它总是执行,后面的代码也就是if语句不可访问,因为控件总是从return amount返回。
一种可能的解决方案是,首先您必须检查金额类型,然后在else部分检查金额<0语句,最后返回该语句。返回金额;
将控制流移动到您的方法之外,因此没有必要在其后添加任何代码,因为它将不会被执行(这将是死代码)。在执行return
ed之后,您不能使用代码,因为它将永远不会被调用。如果要继续,请不要返回。请解释问题是什么,以及您认为这将解决问题的原因?由于引发异常,将永远不会执行第二个If
(amount@IsidroGH您应该在答案中添加该注释。因为所有答案都应该包括解释或支持答案的方式。是的,您用英语思考的速度比我快:)谢谢。我在想我可以为每个if/语句获得一个返回。欢迎@Luke8h。这样,一个返回语句就可以了。