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

我用无参带返回方法做,为什么出现return b中的b未被定义呢?我前面已经定义了,double b.

我用无参带返回方法做,为什么出现return b中的b未被定义呢?我前面已经定义了,double b.

慕少5814628 2018-03-02 11:26:51
查看完整描述

4 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

关键不在 b 没有初值!


就像你在前面回答中的疑问“我的if结构不能将b初始化吗?我在if对b进行了赋值了,为什么不可以呢?”

你想得没错。变量 b 在定义时没有初始化,但后面 if 结构将 b 初始化了的话是没问题的!


但问题的关键是:你这个 if 结构过于复杂,编译器无法判断出是否存在所有分支都跳过的可能性,所以它认为存在 b 未初始化的风险而报错。

如果你把最后一个分支加上 else 语句(同时也在其中赋予 b 适合的值),编译器可能就不会报错了。因为很容易就能推断出 if else 这样的结构中至少有一个分支会被执行。


当然这原因很可能是编译器相关的。不过在可能的情况下,明确给予每个变量合适的初值确实是个好习惯。

查看完整回答
1 反对 回复 2018-03-02
?
非学霸

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

定义double的时候初始化一下,double b=0.0

查看完整回答
反对 回复 2018-03-03
?
慕丝8697856

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

萨芬的撒

查看完整回答
反对 回复 2018-03-03
?
hello_world_mk

TA贡献13条经验 获得超2个赞

一般在方法里定义变量的时候都要给他个初始值,除非你定义全局变量

查看完整回答
反对 回复 2018-03-02
?
BekeyChao

TA贡献8条经验 获得超8个赞

我建议你把方法改一下

public double price(double a) {
    if (a >= 200) {
        return 0.85 * a;
    } else if(a >= 100) {
        return 0.95 * a;
    } else {
        return a;
    }
}

有确定的返回值时最好直接返回

查看完整回答
反对 回复 2018-03-02
?
qq_国宝_0

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

Java规定: 作为返回值的变量需要进行初始化. 你需要类似这样的初始化: double b = 0;

查看完整回答
反对 回复 2018-03-02
?
慕少5814628

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

图片是这个

  

//img1.sycdn.imooc.com//5a98c5e600017f3804690222.jpg

查看完整回答
反对 回复 2018-03-02
  • 4 回答
  • 0 关注
  • 2583 浏览

添加回答

举报

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