黑马程序员技术交流社区

标题: 编译并运行以下代码将发生什么呢~ [打印本页]

作者: 黑马李文    时间: 2013-5-28 17:01
标题: 编译并运行以下代码将发生什么呢~
本帖最后由 黑马李文 于 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. }
复制代码

作者: FantasticPie    时间: 2013-5-28 17:06
报错。
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
        j cannot be resolved to a variable
j是个未定义的变量,之前定义的变量只在case ‘x’ 和default下有用。在for循环以外无用。涉及变量的作用域的问题。
作者: 王永贺    时间: 2013-5-28 17:33
j属于局部变量,不能赋值给i。否则会报错:j未定义
作者: 黄炳期    时间: 2013-5-28 18:33
运行结果就这样:


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

作者: 风爽    时间: 2013-5-28 18:50
编译就不会通过,j是局部变量
作者: 黑马李文    时间: 2013-5-29 08:47
黄炳期 发表于 2013-5-28 18:33
运行结果就这样:

为什么改后是打印11个100呢~  
作者: 黄炳期    时间: 2013-5-29 10:36
黑马李文 发表于 2013-5-29 08:47
为什么改后是打印11个100呢~

循环内打印了10次,循环外又打印了一次,总共11次。
作者: 黑马李文    时间: 2013-5-29 11:51
黄炳期 发表于 2013-5-29 10:36
循环内打印了10次,循环外又打印了一次,总共11次。

哎没理解~
作者: 黄炳期    时间: 2013-5-29 13:31
黑马李文 发表于 2013-5-29 11:51
哎没理解~

循环内打印10次100能理解么?
同时,结束时,j=100,后面有i=j,i=100,
System.out.println(i);这里又打印了一次100。
这是个人的理解。希望能帮到你。
作者: 黑马李文    时间: 2013-5-29 14:26
黄炳期 发表于 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:47
黑马李文 发表于 2013-5-29 14:26
循环内打印10次100  这个解释下吧~    case 'x' :  这个x是什么啊

我倒。你哪里不理解你早点说啊。。。
晚上再说吧,现在没时间了。。
作者: 殇_心。    时间: 2013-5-29 16:30
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
作者: 黑马李文    时间: 2013-5-30 08:50
黄炳期 发表于 2013-5-29 14:47
我倒。你哪里不理解你早点说啊。。。
晚上再说吧,现在没时间了。。

哦 那你什么时候有时间帮我解释下 谢谢
作者: 黄炳期    时间: 2013-5-30 12:12
黑马李文 发表于 2013-5-30 08:50
哦 那你什么时候有时间帮我解释下 谢谢

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




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