黑马程序员技术交流社区

标题: 复习时看到的一个小例子,跟大家分享下 [打印本页]

作者: 朱晓盼    时间: 2014-4-2 22:02
标题: 复习时看到的一个小例子,跟大家分享下
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 show(0);
  6.                 show(1);
  7.         }       
  8.         public static void show(int i)
  9.         {
  10.                 switch(i)
  11.                 {       
  12.                         default:
  13.                                 i+=2;
  14.                         case 1:
  15.                                 i+=1;
  16.                         case 4:
  17.                                 i+=8;       
  18.                         case 2:
  19.                                 i+=4;
  20.                 }
  21.                 System.out.println("i="+i);
  22.         }       
  23. }
复制代码

输出结果是14和15
一开始没搞懂,后来调试了下代码,自己总结了下,不知道具体不,大家给点意见
该代码中,缺少了break语句,使得每句case下的语句依次执行
当传入的值不在case中时,执行default下的语句
当传入的值在case中时,不执行default下的语句
作者: 黄泉    时间: 2014-4-2 22:16
class Demo
{
        public static void main(String[] args)
        {
                show(0);
                show(1);
        }        
        public static void show(int i)
        {
                switch(i)
                {        
                        default:
                                i+=2;
                        case 1:
                                i+=1;
                        case 4:
                                i+=8;        
                        case 2:
                                i+=4;
                }
                System.out.println("i="+i);
        }        
}

你想的是正确的。
show(0)  i的值是0  
在 switch 选择时,没有 case 满足,所以执行 default
而 default 没有定义 break
所以会一直往下执行,而且不会再进行判断,直到语句结束执行为止。

show(1) 也是一样的  只是是从 case 1开始执行的。
作者: Quasimodo    时间: 2014-4-3 01:57
刚开始看基础视频两天,刚好看到函数。看了这段代码有个疑问,这个 show 应该是个函数吧?在函数的格式中,变量 i 是函数的形式变量。然后最后打印 i 的值的时候,这里的 i 是调用后的返回值? 那么,实际操作中是不是要重新定义个变量来储存函数的返回值,打印的时候打印这个变量,这样把两个变量区分开来是不是更明了一点?有没有必要这样做呢?谁能给说说~~谢谢
作者: 朱晓盼    时间: 2014-4-3 11:18
Quasimodo 发表于 2014-4-3 01:57
刚开始看基础视频两天,刚好看到函数。看了这段代码有个疑问,这个 show 应该是个函数吧?在函数的格式中 ...

按照你的问题,我一一给你解答吧
1,shou是个函数,这个你对比下函数定义的格式就知道了
2,i不一定是调用后的返回值,当然,根据你的需要,你也可以返回i。
这里再给你说下定义函数时的两个明确吧,很经典:
定义函数时,首先要明确这个函数有没有返回值,如果有,是什么数据类型?如果没有,使用void
其次,要明确是否有未知参数参与运算,如果有,分别定义这些参数

3,返回值是返回给调用这个函数的对象的,你可以定义一个变量来存储这个返回值,然后再打印,或者,直接在输出语句中输出这个方法的返回值
4,你说的这两个变量完全就是不同的两个变量,本身没有联系,何谈区分?
5,建议你继续向下看视频,这些问题都会迎刃而解。写个简单的代码帮助你理解
  1. class Funtion
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int a = get(9);//这里的9是实际参数,9将会被传入i中
  6.                 System.out.println("a="+a);
  7.                 System.out.println(get(9));
  8.         }
  9.         public static int get(int i)//这里的i是形式参数
  10.         {
  11.                 int b =0;
  12.                 i++;
  13.                 b = ++i;
  14.                 return b;//返回值,主要是看你需要什么,就可以返回什么,不一定是i
  15.         }
  16. }
复制代码


作者: Quasimodo    时间: 2014-4-3 19:56
朱晓盼 发表于 2014-4-3 11:18
按照你的问题,我一一给你解答吧
1,shou是个函数,这个你对比下函数定义的格式就知道了
2,i不一定是调用 ...

明白了  多谢~
作者: 491138002    时间: 2014-4-3 21:28
switch (表达式){
case 值1 : 语句1
break;

case 值2 : 语句2
break;

...
default : 语句n
break;
}

从表达式值等于某个case语句后的值开始,它下方的所有语句都会一直运行,直到遇到一个break为止。随后,switch语句将结束,程序从switch结束大括号之后的第一个语句继续执行,并忽略其他case。
假如任何一个case语句的值都不等于表达式的值,就运行可选标签default之下的语句。
假如表达式的值和任何一个case标签都不匹配,同时没有发现一个default标签,程序会跳过整个switch语句,从它的结束大括号之后的第一个语句继续执行。




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