黑马程序员技术交流社区

标题: 关于if和else小疑问!!! [打印本页]

作者: 聂益飞    时间: 2013-3-27 00:37
标题: 关于if和else小疑问!!!
  1. int x = 10;
  2. int y;

  3. if (x > 10) {
  4.         y = 10;
  5. } else if (x == 10) {
  6.         y = 20;
  7. } else if (x < 10) {
  8.         y = 30;
  9. } else {
  10.         y = 0;
  11. }

  12. int z = y + 20;
  13. System.out.println(z);
复制代码
如上代码!!我一旦不加else为什么y会在编译期间报错?????这个不太好理解啊
作者: 牛海亮    时间: 2013-3-27 00:55
程序第二行 int y;      y没有初始化。 写成 int y = 0; 就行了
作者: 牛海亮    时间: 2013-3-27 00:57
在eclipse下运行,这些错误会自动报提示的。
作者: 高顺德    时间: 2013-3-27 00:58
如果第二行 声明的时候放在方法内的话需要给个默认值的就不出错了。
作者: 罗胜华    时间: 2013-3-27 01:10
本帖最后由 lsh12330ok 于 2013-3-27 01:11 编辑

我觉得你应该把程序改一下:
  int x =10;
  int y;
           if (x > 10) {
                       y = 10;
                } else if (x == 10) {
                       y = 20;
                } else {
               y = 30;
                }

                int z = y + 20;

                System.out.println(z);
}
第三个else if语句没必要,因为前面的条件都不满足时,就用else语句判断
如果你是按照你上面的代码,很明显你不写 else语句,java虚拟机肯定会给你报错 说y没有被初始化,想避免此类错误,声明变量y的时候  int y =0;
我代码里面的else 指的是 x<10的情况
作者: 李尧    时间: 2013-3-27 03:03
这又得说到编译期和运行期的问题.
编译期来说,编译器无法确定你的if 和if else是否一定会被执行,只有运行了才知道.
而你的Y没有进行初始化赋值,如果你的if 和else if都没有执行的话,y就没有初始化,所以必须要有else编译器才允许编译通过.
所以你可以 在定义Y的时候写成y=0 这样就不需要最后的else了.
作者: 蔡陶军    时间: 2013-3-27 03:25
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x=5;
  6.                 int y=0;
  7.                 if(x>10)
  8.                 {
  9.                         y=10;
  10.                 }
  11.                 else if(x==10)
  12.                 {
  13.                         y=20;
  14.                 }
  15.                 else
  16.                 {
  17.                         y=30;
  18.                 }
  19.                 int z=y+20;
  20.                 System.out.println(z);
  21.         }
  22. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2