A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

int b  ;
        for (int a =1;a < 6 ;a++ ) {
                for (b = 1;b < 8 ;b++ ) {
                        System.out.print("*");
                }
                System.out.println();       
        }
                System.out.println("b="+b);

14 个回复

倒序浏览
有知道的同学吗
回复 使用道具 举报
int b 没有初始化值
回复 使用道具 举报
作用域问题,输出的b没有定义,循环中的b作用域不能到达循环外,。
回复 使用道具 举报
b没有初始化,。
回复 使用道具 举报
局部变量可以不初始化,但必须在调用时有值。
你这段代码给b赋值是在一级for循环的内部,假如一级for循环在第一次判断条件时就为假,内部循环也就没有执行的机会,b就未赋值,那么在打印“b=”+b时,就会出错。
也就是说,你在使用变量的值时必须保证此时它有值(成员变量是默认赋值,所以无此问题)。
你不信可以简单的试试删除“b=”+b中的b,就不出错了。
回复 使用道具 举报 1 0
成员变量有默认初始化值,局部变量必须要初始化或者赋值调用,循环内的内容执不执行都会报错,因为b赋值是在循环内部,作用域就在循环内,循环执行完毕,b的值就在栈内存中消失.在循环外输出b就会报b为初始化的错,
回复 使用道具 举报
ruili 中级黑马 2015-8-25 20:57:02
8#
for循环中的初始化变量的值在for循环结束后就会被清除
回复 使用道具 举报
表示能看懂问题但是说不出来,唉   还是等着基础班开学认真学吧
回复 使用道具 举报
至尊幽蓝 来自手机 中级黑马 2015-8-26 16:43:55
10#
放飞邹莺 发表于 2015-8-25 20:46
成员变量有默认初始化值,局部变量必须要初始化或者赋值调用,循环内的内容执不执行都会报错,因为b赋值是在循 ...

值的作用域在哪不是看它在哪赋值,是看它在哪定义的,在外面定义的,在块内部赋值,出了块,这个变量值就是响应改变了,这个想想就知道
回复 使用道具 举报
第二个for循环中对变量b赋值后,待for循环结束。这个变量的值在内存中应该就释放掉了吧
回复 使用道具 举报
局部变量的b在循环后就消失了 所以打印会报错
回复 使用道具 举报
SYAD 中级黑马 2015-8-26 20:33:26
13#
b变量没有初始化导致的
回复 使用道具 举报
b值不再里层for中 不能打印出来的
回复 使用道具 举报
809116766 来自手机 中级黑马 2015-8-26 20:48:02
15#
不错,不错,加油来自: iPhone客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马