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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马李文 中级黑马   /  2013-5-28 17:01  /  2197 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马李文 于 2013-5-30 16:36 编辑

编译并运行以下代码将发生什么呢??
  1. public static void main(String args[]){
  2.             char digit = 'a';
  3.             for (int i = 0; i < 10; i++){
  4.                       switch (digit)
  5.                       {
  6.                                 case 'x' :
  7.                                 {
  8.                                         int j = 0;
  9.                                                 System.out.println(j);               
  10.                                 }
  11.                                 default :
  12.                                 {
  13.                                         int j = 100;
  14.                                                 System.out.println(j);               
  15.                                 }
  16.                       }
  17.            }
  18.            
  19.         int i = j;
  20.            System.out.println(i);        
  21. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

13 个回复

倒序浏览
报错。
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
        j cannot be resolved to a variable
j是个未定义的变量,之前定义的变量只在case ‘x’ 和default下有用。在for循环以外无用。涉及变量的作用域的问题。
回复 使用道具 举报
j属于局部变量,不能赋值给i。否则会报错:j未定义
回复 使用道具 举报
运行结果就这样:


其实不用运行也知道,j是定义在switch语句中的变量,跳出switch语句之后,变量j在内存中就被释放了。
你要想在for循环之外使用j变量,可以定义digit的时候一起定义j变量。这样就可以运行了。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
编译就不会通过,j是局部变量
回复 使用道具 举报
黄炳期 发表于 2013-5-28 18:33
运行结果就这样:

为什么改后是打印11个100呢~  
回复 使用道具 举报
黑马李文 发表于 2013-5-29 08:47
为什么改后是打印11个100呢~

循环内打印了10次,循环外又打印了一次,总共11次。
回复 使用道具 举报
黄炳期 发表于 2013-5-29 10:36
循环内打印了10次,循环外又打印了一次,总共11次。

哎没理解~
回复 使用道具 举报
黑马李文 发表于 2013-5-29 11:51
哎没理解~

循环内打印10次100能理解么?
同时,结束时,j=100,后面有i=j,i=100,
System.out.println(i);这里又打印了一次100。
这是个人的理解。希望能帮到你。
回复 使用道具 举报
黄炳期 发表于 2013-5-29 13:31
循环内打印10次100能理解么?
同时,结束时,j=100,后面有i=j,i=100,
System.out.println(i);这里又 ...

循环内打印10次100  这个解释下吧~    case 'x' :  这个x是什么啊
回复 使用道具 举报
黑马李文 发表于 2013-5-29 14:26
循环内打印10次100  这个解释下吧~    case 'x' :  这个x是什么啊

我倒。你哪里不理解你早点说啊。。。
晚上再说吧,现在没时间了。。
回复 使用道具 举报
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
黄炳期 发表于 2013-5-29 14:47
我倒。你哪里不理解你早点说啊。。。
晚上再说吧,现在没时间了。。

哦 那你什么时候有时间帮我解释下 谢谢
回复 使用道具 举报
黑马李文 发表于 2013-5-30 08:50
哦 那你什么时候有时间帮我解释下 谢谢

我想知道你这程序哪来的?哥儿们你看了视频了么?
x就是字母x啊,这里是一个字符。之前不是定义一个char变量么,现在就是要判断digit的值是不是x,
  如果不是,就输出default语句。
  我希望你认真的学习,这种问题一时转不过弯,可以理解,但是,解释了这么多,还不理解,就是你自己的问题了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马