为了账号安全,请及时绑定邮箱和手机立即绑定

定义判断质数的方法,奇怪的语法错误

定义判断质数的方法,奇怪的语法错误

斯蒂芬大夫 2016-09-16 14:47:54
错误提示如下:我明明有返回布尔值,为什么还出错?
查看完整描述

4 回答

已采纳
?
遗忘草

TA贡献5条经验 获得超1个赞

 最外层的if逻辑是严谨的,只要走到这里面就必须会有返回值;现在问题出在最外层的else没有绝对的最后返回值,虽然对于我们很直观地可以看到,for循环必然会至少执行一次,所以我们认为也必然会有返回值。但其实for循环归根结底也就是个判断语法,编译器在编译过程中并不认为a必须得大于2,换句话说for循环体有可能不被执行,即在这种情况下else米面的逻辑并没有返回值,这样编译器就会抛出如上所示错误。所以,这里可以用一个没有实际意义的返回(其实在实际运行中并不会执行到),骗过编译器,通过语法即可。示例如下(return true也可以,因为不会被执行):


//img1.sycdn.imooc.com//57dd6044000129f104320341.jpg


查看完整回答
反对 回复 2016-09-17
?
Teemo_

TA贡献11条经验 获得超21个赞

举例来说,你28行的if如果不成立,则没有返回值。

查看完整回答
反对 回复 2016-09-17
?
一直被忽略

TA贡献1条经验 获得超0个赞

你的问题出现在第一个if哪里, 现在假设程序运行到else代码块中,而假设a=0,那么程序就不会执行你的for循环,从而,你的else 代码块就结束了,这就是编译器为什么出错。因为出现 刚才的情况你的方法没有返回值了

查看完整回答
反对 回复 2016-09-16
  • 斯蒂芬大夫
    斯蒂芬大夫
    运行到第一个if的else那里,a就已经是大于等于3了,怎么会低于0?
?
Caballarii

TA贡献1123条经验 获得超629个赞

编辑器并不能判断你一定进入那个分支,所以所有的if都要有else,并且if和else里都要有return,否则你就在最外面的ifelse外面再来一个return兜底,这里主要是第27行的if里面只有if,万一进了里面那个if的else,那就没有return了

查看完整回答
反对 回复 2016-09-16
  • 斯蒂芬大夫
    斯蒂芬大夫
    进了里面那个if的else时不应该是进入下一次循环吗?到时候自然会return啦 如果按你说的,那应该怎么改?
  • Caballarii
    Caballarii
    其实a大于等于3这个else分支里你的逻辑是混乱的,反正你之前的问题都没采纳过,懒得说了
  • 斯蒂芬大夫
    斯蒂芬大夫
    不混乱啊,大致意思是a如果全部都不能整除2到a-1之间的整数,则a为质数。之前的那个问题没采纳是因为,你的回答并没有解决我的问题,你说的没有令我看懂。
  • 4 回答
  • 0 关注
  • 1758 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信