黑马程序员技术交流社区

标题: java易错题说说这个程序打印什么 [打印本页]

作者: 王安琪    时间: 2013-8-4 11:09
标题: java易错题说说这个程序打印什么

  1. <div class="blockcode"><blockquote>public class  Waq{  
  2.    public static void main(String[] args) {  
  3.        for (int i =1; i < 7; i++) {  
  4.             switch (i) {  
  5.             case 1:  
  6.                System.out.println("wang");  
  7.                break;  
  8.            default:  
  9.                System.out.println("an");  
  10.             case 2:  
  11.                 System.out.println("qi");  
  12.                break;  
  13.             }  
  14.         }  
  15.     }  
  16. }  
复制代码

作者: 吴光新    时间: 2013-8-4 11:50
我就说说里面的break和default,break结束的值是switch体,并没有跳出for循环,估计你想考的也是这里吧
i=1,for条件满足,case 1执行,遇到break;结束switch;打印wang
i=2,for条件满足,case 2执行,遇到break;结束switch;打印qi
i=3,for条件满足,但switch找不到符合条件的语句,就执行default,打印an,因为没有break;继续向下执行,打印qi,遇break结束switch;
i=4、5、6都如3那样执行~~!!!!

作者: 王安琪    时间: 2013-8-4 12:00
Jiewin 发表于 2013-8-4 11:50
我就说说里面的break和default,break结束的值是switch体,并没有跳出for循环,估计你想考的也是这里吧
i=1 ...

呵呵 ...   细心看下其实很简单的
作者: 王安琪    时间: 2013-8-4 12:01
Jiewin 发表于 2013-8-4 11:50
我就说说里面的break和default,break结束的值是switch体,并没有跳出for循环,估计你想考的也是这里吧
i=1 ...

说的没错啊   考的就是break跳出的是switch
作者: 神之梦    时间: 2013-8-4 22:15
不错,可以多弄些细节方面的问题发到论坛上来
作者: kmter    时间: 2013-8-4 23:59
break跳出的是switch这是常识, 想要直接跳出for循环可以在for循环前加一个标记
  1. flag: for (int i =1; i < 7; i++) {
  2.             switch (i) {
  3.                         default:  
  4.                System.out.println("an " + "i=" + i);
  5.             case 1:  
  6.                System.out.println("wang " + "i=" + i);  
  7.                break flag;
  8.                ......
复制代码
细节是default在case前, 如果default执行了, 则会一直执行下去直至遇到break或者到switch末尾才会跳出switch.
由此也可以发现JVM是先把switch中选择表达式的值(在此为i),先与各个case一一对应之后才会执行default不论default在case前还是case后.




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