黑马程序员技术交流社区

标题: 请教一道题,希望大神能说详细点 [打印本页]

作者: 呆呆呆呆孔    时间: 2015-4-28 22:29
标题: 请教一道题,希望大神能说详细点

  1. int  x = 10;
  2. int  y ;
  3. if(x>20)
  4. { y= 10}
  5. else if(x>5)
  6. {y=4}
  7. else
  8. { System.out.println( “over”)}
复制代码

如题:为什么会编译失败呢
作者: xiao7181jun    时间: 2015-4-28 22:37
本帖最后由 xiao7181jun 于 2015-4-28 22:43 编辑

你的int y; 没有定义初始化值!
加上 int y = 0;即可。像这样int y; 不给y定义初始化值也不是不可以。 但是为什么会编译失败,主要是你因为最后的else语句中缺少y的值,系统无法判断你的这个语句中的 y 会不会超出数据范围,系统无法保证数据范围,所以编译失败。
只要你在 else 语句中也定义 y得值,就OK了!


作者: 米江波    时间: 2015-4-28 22:44
会提示Y的变量没有初始化值  你把y初始化下就ok啦
作者: exist    时间: 2015-4-28 22:57
本帖最后由 exist 于 2015-4-28 22:59 编辑
  1. int  x = 10;
  2. int  y ;//可以给y先定义一个初始值 int y = 0;
  3. if(x>20)
  4. { y= 10;}
  5. else if(x>5)
  6. {y=4;}
  7. else
  8. { //或者在else的大括号内对y进行赋值
  9. System.out.println( “over”);
  10. }
复制代码

单你所以的表达式都有对y赋值的动作时你的y可以不定义初始化值。但是你最后的else 没有对y的赋值动作那么你就先对y进行初始化你在没个语句结束的分号也没加上哦。

作者: rightyuan521    时间: 2015-4-28 23:00
正确代码如下,自己对比运行
                int  x = 10;
                int  y = 0 ;
                if(x>20){
                        y= 10;
                }
                else if(x>5){
                        y=4;
                }
                else{
                        System.out.println( "over");
                }
                System.out.println(y);
        }

}

作者: 呆呆呆呆孔    时间: 2015-4-29 00:20
xiao7181jun 发表于 2015-4-28 22:37
你的int y; 没有定义初始化值!
加上 int y = 0;即可。像这样int y; 不给y定义初始化值也不是不可以。  ...

谢谢了,要么初始化,要么在else中给y赋值
作者: wnk77521    时间: 2015-4-29 02:39
第一个错误 y=10后面没有;这个错误你犯了 3次 还有 你的这个x
作者: wnk77521    时间: 2015-4-29 02:41
和y 都是局部变量 必须得赋值 而且你没有必要定义y  直接在输出语句中打印y就可以 还有不要用中文的字符
作者: wnk77521    时间: 2015-4-29 02:42
  1. package com.itheima;

  2. class Test21 {

  3.         public static void main(String[] args) {

  4.                 int x = 10;
  5.                 int  y=0;
  6.                 if (x > 20) {
  7.                         y = 10;
  8.                 } else if (x > 5) {
  9.                         y = 4;
  10.                 } else {
  11.                         System.out.println("over");
  12.                 }

  13.         }

  14. }
复制代码

作者: 呆呆呆呆孔    时间: 2015-4-29 07:08
wnk77521 发表于 2015-4-29 02:42

谢谢了,真仔细了,一般写程序不这样写,但是一般考我们就这样考,小悲催
作者: 呆呆呆呆孔    时间: 2015-4-29 07:10
rightyuan521 发表于 2015-4-28 23:00
正确代码如下,自己对比运行
                int  x = 10;
                int  y = 0 ;

你这是先给y初始化,这个我懂,还有一个方式,老师讲课时候,变量定义有两种,第一种就是标准格式了,这个题用到算是第二种吧
作者: 只吃饭不洗碗    时间: 2015-4-29 13:53
语句没有结束符号“;”能编译通过就怪啦
作者: KK要有光    时间: 2015-4-29 18:58
另外代码块中也没有以分好结束,不规范。
作者: gzp123    时间: 2015-4-29 21:12
请问主函数在哪里?没有函数就不能用System.out.println();
作者: wangyu    时间: 2015-4-29 21:14
大神还是很多
作者: 我爱吃橙子    时间: 2015-4-29 21:29
大神就是多  受教了
作者: 雪风飞花    时间: 2015-4-29 21:49
因为你的定义的int y局部变量没有进行初始化,你的else语句也没有对Y进行赋值操作
作者: 呆呆呆呆孔    时间: 2015-4-29 22:18
{:3_46:},嗯,知道了,谢谢喽
作者: fanxia_2007    时间: 2015-4-29 22:25
大神们都在这里了,膜拜!
作者: 呆呆呆呆孔    时间: 2015-4-30 00:00
只吃饭不洗碗 发表于 2015-4-29 13:53
语句没有结束符号“;”能编译通过就怪啦

错误有点错啊
作者: 呆呆呆呆孔    时间: 2015-4-30 00:01
gzp123 发表于 2015-4-29 21:12
请问主函数在哪里?没有函数就不能用System.out.println();

大神,求抱大腿哈
作者: 怪学究    时间: 2015-4-30 00:11
已经帮你调试好 ,快来看看吧
class Demo
{
        public static void main(String[] args)
        {
                       
                int  x = 10;
                int  y = 0 ;
                if(x>20)
                {
                        y= 10;
                        System.out.println(y);
                }
                else if(x>5) //实际上是(5,20】的区间
                {
                        y=4;
                        System.out.println(y);
                }
                else
                { System.out.println("over");}
        }
}



作者: frankzheng329    时间: 2015-4-30 00:41
局部变量必须初始化
成员变量不需要
作者: 夜土族第一帅兔    时间: 2015-4-30 07:12
看了半天懂了,但是不理解啊,为什么一定必须要给y赋初始值呢?为什么不在else给y赋就会超出呢?
作者: 呆呆呆呆孔    时间: 2015-4-30 19:13
fanxia_2007 发表于 2015-4-29 22:25
大神们都在这里了,膜拜!

一起膜拜吧
作者: ninjaes    时间: 2015-4-30 21:42
多看多学习呀   
作者: 呆呆呆呆孔    时间: 2015-5-1 09:13
怪学究 发表于 2015-4-30 00:11
已经帮你调试好 ,快来看看吧
class Demo
{

谢谢了,可以了
作者: 呆呆呆呆孔    时间: 2015-5-1 09:19
夜土族第一帅兔 发表于 2015-4-30 07:12
看了半天懂了,但是不理解啊,为什么一定必须要给y赋初始值呢?为什么不在else给y赋就会超出呢? ...

变量一定要初始化的,上了考试不是说有两种格式了?

第一种: 数据类型  变量名 =  初始化值
              
  1. int y = 1;
复制代码


第二种: 先定义变量,然后再给变量赋值
                             

  1.                              int  y;
  2.                               y=  5;
复制代码




如题是第二种方式,而且if  els语句必须有一个分支执行,所以每个分支必须有对 y赋值的操作,如没有就认为你没做初始化动作。就会报错

作者: 呆呆呆呆孔    时间: 2015-5-1 09:20
ninjaes 发表于 2015-4-30 21:42
多看多学习呀

好的,多看别人写的,多思考,多总结哈
作者: 呆呆呆呆孔    时间: 2015-5-1 09:22
frankzheng329 发表于 2015-4-30 00:41
局部变量必须初始化
成员变量不需要

对,一语中的 局部的必须给做初始化动作,而成员会有默认初始化
作者: 呆呆呆呆孔    时间: 2015-5-1 09:23
我爱吃橙子 发表于 2015-4-29 21:29
大神就是多  受教了

一起膜拜大神吧
作者: 呆呆呆呆孔    时间: 2015-5-1 09:24
exist 发表于 2015-4-28 22:57
单你所以的表达式都有对y赋值的动作时你的y可以不定义初始化值。但是你最后的else 没有对y的赋值动作那么 ...

谢谢了,讲这么详细,长姿势了
作者: 崔小可    时间: 2015-5-1 09:34
要么初始化,要么在else中给y赋值
作者: 黄敬璇    时间: 2015-5-1 09:44
上面讲的已经好详细了
作者: 黑夜的触手    时间: 2015-5-1 11:49
给y赋上初始值
作者: 呆呆呆呆孔    时间: 2015-5-1 18:39
黄敬璇 发表于 2015-5-1 09:44
上面讲的已经好详细了

是的,涨姿势了
作者: 呆呆呆呆孔    时间: 2015-5-2 08:15
gzp123 发表于 2015-4-29 21:12
请问主函数在哪里?没有函数就不能用System.out.println();

偷懒了,没有写哈
作者: 呆呆呆呆孔    时间: 2015-5-2 08:17
黑夜的触手 发表于 2015-5-1 11:49
给y赋上初始值

恩恩,谢谢ieee
作者: 夜土族第一帅兔    时间: 2015-5-6 06:24
呆呆呆呆孔 发表于 2015-5-1 09:19
变量一定要初始化的,上了考试不是说有两种格式了?

第一种: 数据类型  变量名 =  初始化值

懂了:handshake
作者: 1017161726    时间: 2015-5-6 08:44
y定义在循环外面,可以不赋值。但是你大括号里的语句没有结束。三个都没有结束。
作者: 鱼饵    时间: 2015-5-6 08:51
用分号结束啦,以后要小心点。
作者: 狙神自傲    时间: 2015-5-6 11:16
我也觉得是没加;的问题
作者: 呆呆呆呆孔    时间: 2015-5-6 21:03
狙神自傲 发表于 2015-5-6 11:16
我也觉得是没加;的问题

那是笔误哈
作者: 呆呆呆呆孔    时间: 2015-5-6 21:04
狙神自傲 发表于 2015-5-6 11:16
我也觉得是没加;的问题

大神回复了
作者: 呆呆呆呆孔    时间: 2015-5-6 21:06
鱼饵 发表于 2015-5-6 08:51
用分号结束啦,以后要小心点。

恩恩,这的确也是错误
作者: 呆呆呆呆孔    时间: 2015-5-6 21:07
1017161726 发表于 2015-5-6 08:44
y定义在循环外面,可以不赋值。但是你大括号里的语句没有结束。三个都没有结束。 ...

{:2_31:},大神正解
作者: 呆呆呆呆孔    时间: 2015-5-6 21:08
1017161726 发表于 2015-5-6 08:44
y定义在循环外面,可以不赋值。但是你大括号里的语句没有结束。三个都没有结束。 ...

{:2_31:},大神正解
作者: 呆呆呆呆孔    时间: 2015-5-6 21:09
frankzheng329 发表于 2015-4-30 00:41
局部变量必须初始化
成员变量不需要

不太懂啊。。。。。
作者: 王英明    时间: 2015-5-6 21:18
局部变量还是初始化的好!习惯
作者: 张伟1942    时间: 2015-5-6 21:40
y要进行初始化
作者: 呆呆呆呆孔    时间: 2015-5-7 19:35
张伟1942 发表于 2015-5-6 21:40
y要进行初始化

{:2_31:},原因就在这呢




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