Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的if(布尔)不可访问语句_Java_If Statement_Unreachable Statement - Fatal编程技术网

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。这样,一个
返回
语句就可以了。