2013-12-18 20 views
2
public double open() { 
    if (status.equalsIgnoreCase("Pending")) { 
     status = "Open"; 
     if (startPrice <= 5) { 
      return 0.2; 
     } else if (startPrice > 5 && startPrice <= 20) { 
      return 0.5; 
     } else if (startPrice > 20 && startPrice <= 100) { 
      return 1; 
     } else if (startPrice > 100 && startPrice <= 250) { 
      return 2.5; 
     } else if (startPrice > 250) { 
      return 5; 
     } 
    } else if (!status.equals("Pending")) { 
     return -1; 
    }   
} 

你能解释为什么编译器不断要求缺少返回语句。我怎么能解决这个问题为什么我的代码不断要求丢失返回语句

+0

status =“pending” –

+1

java没有足够的智能来知道你的2 if语句是详尽无遗的。你真的需要明确地告诉它。据java知道,if和else可能是假的,然后它不知道该怎么做。它必须返回一个double,但你没有告诉它该做什么。 – Cruncher

回答

0

这是因为,如果:

status.equals("Pending") 

回报true,你什么都不返回。

您可以使用:

if (status.equalsIgnoreCase("Pending")) { 
     .... 
    } else { 
     return -1; 
    } 
1

这是抱怨,因为你所有的return语句是if statements。只要删除else if并在最后返回-1。

2

做这样

public double open() { 
    if (status.equalsIgnoreCase("Pending")) { 
     status = "Open"; 
     if (startPrice <= 5) { 
      return 0.2; 
     } else if (startPrice > 5 && startPrice <= 20) { 
      return 0.5; 
     } else if (startPrice > 20 && startPrice <= 100) { 
      return 1; 
     } else if (startPrice > 100 && startPrice <= 250) { 
      return 2.5; 
     } else if (startPrice > 250) { 
      return 5; 
     } 
    } 
    return -1; 
}  
+0

@sᴜʀᴇsʜᴀᴛᴛᴀthanks ...... – Prabhakaran

+1

解释为什么编译器抱怨可能是有帮助的。 – Cruncher

+0

“你能解释一下为什么编译器不断询问丢失的返回语句吗?” – Troubleshoot

0

变化最后if else只是else提供一个备用的解决方案。您正在为if else提供另一个if条件,因此如果此条件为false,则不存在分支。

1

如果没有

  1. status.equalsIgnoreCase( “挂起”)
  2. !status.equals( “待定”)

是真的吗?

您还需要一个return语句。

3

编译器不知道status.equalsIgnoreCase("Pending")!status.equals("Pending")涵盖了所有可能性。事实上,我只是猜测,从检查函数名称。

你需要帮忙。

一个补丁修复 - 如果这是你的意图 - 是写

} else /*if (!status.equals("Pending"))*/ { 
    return -1; 
} 
1

Java是不够聪明,以确定你保证返回。你需要明确地告诉它,通过对你的ifs进行其他处理,或者在结束时返回以捕获任何流量。

在这种情况下,您的if语句也是多余的。清理向上和工作版本将如下所示:

public double open() { 
    if (status.equalsIgnoreCase("Pending")) { 
     status = "Open"; 
     if (startPrice <= 5) { 
      return 0.2; 
     } else if (startPrice <= 20) { 
      return 0.5; 
     } else if (startPrice <= 100) { 
      return 1; 
     } else if (startPrice <= 250) { 
      return 2.5; 
     } else { 
      return 5; 
     } 
    } 
    return -1;   
} 

else if (startPrice > 5 && startPrice <= 20)当你有这条线,你已经知道了startPrice > 5。如果不是,那么它会进入前一个if块。

+0

+1的很好的解释....我缺乏这一点。 – Prabhakaran

0

这一切都与return语句是本地的。如果所有的if语句都是false,那么这个方法不会返回任何东西,因为所有的返回语句都是if语句的本地语句。该程序无法知道该状态否则会被挂起,因此编译器会抱怨。

public double open() { 
    if (status.equalsIgnoreCase("Pending")) { 
     status = "Open"; 
     if (startPrice <= 5) { 
      return 0.2; 
     } else if (startPrice > 5 && startPrice <= 20) { 
      return 0.5; 
     } else if (startPrice > 20 && startPrice <= 100) { 
      return 1; 
     } else if (startPrice > 100 && startPrice <= 250) { 
      return 2.5; 
     } else if (startPrice > 250) { 
      return 5; 
     } 
    return -1; // no need for an else statement since if an one if statement returned true it wouldn't execute the rest of the code 
} 
相关问题