switch 语句的格式:

 

switch ( 整型或字符型变量 )

{

 case 变量可能值1 :

   分支一;

 break;

case 变量可能值2 :

   分支二;

 break;

case 变量可能值3 :

   分支三;

 break;

...

default :

最后分支;

 

在 switch 的语法里,我们要学到4个关键字:switch、case 、break、default。

 

在 switch ( 变量 ) 这一行里,变量只能是整型或字符型。程序先读出这个变量的值,然后在各个"case"里查找哪个值和这个变量相等,如果相等,就算条件成立,程序执行相应的分支,直到碰上break或者switch语句结束。

 

 

了解一下switch,case,break,default的意思,对理解前面的一切也会有帮助,它们分别是:开关,情况,中断,默认(值)。那么用一句话套起来的说法就是:根据开关值的不同,执行不同的情况,直到遇上中断;如果所有的情况都不符合开关值,那么就执行默认的分支。

 

最后说一下关于switch中非常重要的几个注意点。

 

第一、switch ( 整型或字符型变量 ) 中,变量的类型如文中所标,只能是整型和字符类型。它们包含 int,char。当然无符类型或不同的长度整型(unsigned int,short,unsigned char)等都可以。另外,枚举类型(enum)内部也是由整型或字符类型实现。所以也可以。实型(浮点型)数就不行,如:

float a = 0.123;

switch(a) //错误!a不是整型或字符类型变量。

{

....

}

 

第二、case 之后可以是直接的常量数值,如例中的1、2、3、4,也可以是一个使用常量计算式,如2+2等,但不能是变量或带有变量的表达式,如 a * 2等。当然也不能是实型数,如4.1,或2.0 / 2 等。

switch(formWay)

{

case 2-1 :  //正确

...

case a-2 :  //错误

...

case 2.0 :  //错误

...

}

另外,在case 与常量值之后,需要一个冒号,请注意不要疏忽。

 

第三、break 的作用。

break 使得程序在执行完选中的分支后,可以跳出整个switch语句(即跳到switch接的一对{}之后),完成switch。如果没有这个break,程序将在继续前进到下一分支,直到遇到后面的break或者switch完成。

比如,假设现在程序进入case 1: 中的分支,但case 1 的分支这回没有加break:

 

case 1 :

System.out.println("您是通过搜索引擎来到本网站的。");

case 2 :

System.out.println("您是通过朋友介绍来到本网站的。");

 

那么,程序在输出 "您是通过搜索引擎来到本网站的。" 之后,会继续输出case 2中的 "您是通过朋友介绍来到本网站的。" 。

请大家将前面实例中的代码片段改为如下(红色部分,即将所有的break都通过加//使之无效。):

...

  case 1 :

System.out.println("您是通过搜索引擎来到本网站的。" );

//break;

case 2 :

System.out.println("您是通过朋友介绍来到本网站的。");

//break;

case 3 :

System.out.println("您是通过报刊杂志来到本网站的。");

//break;

case 4 :

System.out.println("您是通过其它方法来到本网站的。");

//break;

default :

System.out.println("错误的选择!请输入1~4的数字做出选择。");

...

 

运行后,结果会是如何?请大家动手试试,然后在作业中回答我。

 

第四、default是可选中,前面我们已经说过它的用处,及如果没有default,程序在找不到匹配的case分支后,将在switch语句范围内不做什么事,直接完成switch。大家也可以在实例中将default的代码注释掉,然后试运行,并且在选择时输入5。

...

//default :

//cout << "错误的选择!请输入1~4的数字做出选择。" << endl;

...

 

第五、必要时,可在各个case中使用{}来明确产生独立的复合语句。

前面我们在讲if...语句和其它流程控制语句时,都使用{}来产生复合语句:

if (条件)

{

分支一;

}

除非在分支中的语句正好只有一句,这里可以不需要花括号{}。但在switch的各个case语句里,我们在语法格式上就没有标出要使用{},请看:

switch ( 整型或字符型变量 )

{

 case 变量可能值1 :

   分支一;

 break;

case 变量可能值2 :

....

}

 

一般教科书上只是说 case 分支可以不使用{},但这里我想提醒大家,并不是任何情况下case分支都可以不加{},比如你想在某个case里定义一个变量:

switch (formWay)

{

case 1 :

int a=2;  //错误。由于case不明确的范围,编译器无法在此处定义一个变量。

...

case 2 :

...

}

 

在这种情况下,加上{}可以解决问题。

switch (formWay)

{

case 1 :

 { 

int a=2;  //正确,变量a被明确限定在当前{}范围内。

...

 } 

case 2 :

...

}

<script>
var i=5;
swith(i){
case 1:document.write("i=1");
break;
case 2: document.write("i=2");
break;
default:document.write("条件不满足case");
break;
}
</script>

在这样的补充就更加能理解了

<script>
var a='星期五';
switch(a){
case'星期一':
alert('今天是星期一');
case'星期二':
alert('今天是星期二')
break;
case'星期三':
alert('今天是星期三')
break;
case'星期四':
alert('今天是星期四')
break;
case'星期五':
alert('今天是星期五')
break;

}
</script>

谢谢云龙兄。蚂蚁再次谢过

swith 好久不用都忘记了的更多相关文章

  1. c++都忘记了,看了看那本发黄的C++primer,还是要去翻下了

    char *s="string"和char s[]="string"的区别 void main() { char* pStr1 = "Hello!&q ...

  2. php 温故而知新 好久不用 又得继续学习下

    1.php注释:/* */.//.#等三种方式2.echo:向浏览器输出字符串,echo其实是一个函数:返回值:无3.print:向浏览器输出字符串,它也是一个函数:返回值:整型.           ...

  3. oracle 12C SYS,SYSTEM用户的密码都忘记或是丢失

    密码 conn / as sysdba alter user system identified by Abcd1234; manual script first -->manual_scrip ...

  4. 提醒你一下, 你真的很垃圾, 创建一个maven 的web 项目都忘记了

    1. 创建项目 2. 选择maven 项目 3  然后选择创建 web 项目的模板  (结尾是webapp 的) 4. 选择自己的maven 的配置文件 setting.xml  以及自己的maven ...

  5. redis序列化和反序列化的操作-(以前咋操作我都忘记了)

    //拿到数据,redis如果有则将现在有的传进去,如果没有则获取接口 ExWritPropertyVo ExWritPropertyVo = new ExWritPropertyVo(); ExWri ...

  6. 嵌套JSON 取出name与value

    好久不用都忘了 mark下   $.each( { name: "John", lang: "JS" }, function(i, n){ alert( &qu ...

  7. windows的常用快捷键(实用篇)

    整理一下windows的常用快捷键,有些快捷键老不用都忘记了,这里整理一下方便自己以后忘记时翻阅. 一.Fn键的使用 1.F1帮助 2.F2重命名 3.F3打开搜索 4.F4打开地址栏常用地址 5.F ...

  8. [leetcode.com]算法题目 - Gray Code

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...

  9. Android Fragment 初步解析

    Fragment经常在我们的开发中见到,但是自我感觉对Fragment的理解还是处于初级的阶段,接下来我将用几篇文章尽量深的解析Fragment 让我们开始吧!!! Fragment的生命周期 Fra ...

随机推荐

  1. UDP和TCP的区别(转)

    TCP协议与UDP协议的区别    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  2. 字典树(Trie Tree)

    在图示中,键标注在节点中,值标注在节点之下.每一个完整的英文单词对应一个特定的整数.Trie 可以看作是一个确定有限状态自动机,尽管边上的符号一般是隐含在分支的顺序中的.键不需要被显式地保存在节点中. ...

  3. 使用smtp和pop3 协议收发qq邮箱实验

    email系统组件:MTA 消息传输代理,负责邮件的路由,队列和发送SMTP 简单邮件传输协议1 连接到服务器2 登陆3 发出服务请求4 退出POP:邮局协议RFC918 "邮局协议的目的是 ...

  4. Apache Spark技术实战之5 -- SparkR的安装及使用

    欢迎转载,转载请注明出处,徽沪一郎. 概要 根据论坛上的信息,在Sparkrelease计划中,在Spark 1.3中有将SparkR纳入到发行版的可能.本文就提前展示一下如何安装及使用SparkR. ...

  5. copy module

    需求,当有一个实例a,我们需要一个新的实例b,b同a拥有相同的属性. 当我们使用a=b的模式的时候是一个赋值的过程.a和b指向同一个实例.b的任何操作都同a一样. 在这个使用需要使用copy模块.根据 ...

  6. INSTRUCTION EXECUTION CHARACTERISTICS

    Characteristics of Some CISCs, RISCs, and Superscalar Processors One of the most visible forms of ev ...

  7. Java 学习第一步-JDK安装和Java环境变量配置

    Java学习第一步——JDK安装及Java环境变量配置 [原文]  2014-05-30 9:09  Java SE  阿超  9046 views Java作为当下很主流的编程语言,学习Java的朋 ...

  8. win7下用mklink命令解决delphiXE系列占用C盘空间的问题

    DelphiXE从2010以后, 安装程序安装完成后都会在ProgramData目录里复制一份安装程序的备份, 随着版本升级安装包越来越大, 占用C盘的空间也就越来越大 虽然可以通过删除的方式删掉, ...

  9. 对蓝牙profile的理解

    蓝牙profile协议概览.pdf 之所以把Profile翻译为配置文件,是为避免和JavaME中的简表混淆.配置文件也是蓝牙 SIG官方网站给出的标准翻译. 想要使用蓝牙无线技术,设备必须能够翻译特 ...

  10. Qt串口通信接收数据不完整的解决方法

    在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况.因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不 ...