平时在使用switch…case语句的时候,只是会用,没有注意到它的一些细节,怪我大学时C没有学好吧,哈哈,有以下几点需要注意:
第一.switch…case语句中,一般情况下都只是使用到switch…case,很少用到default:,在没有default时,如下:
start= (Button) findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()){
case 0:
Log.e("蛋蛋","--------0");
case 1:
Log.e("蛋蛋","-------1");
case 2:
Log.e("蛋蛋","-------2");
}
}
});
先把switch括号中的view.getId()作为判断条件,要是view.getId()拿到的值为0,则执行case 0:语句,将Log.e(“蛋蛋”,”——–0”);打印出来,由于没有添加break;所以会将后续的两个Log全部执行掉,要是view.getId()拿到的值为1,则会从case 1:开始执行,结果是将1,2给打印出来,而0被跳过了
第二.要是添加了break,则结果会不同,如下:
start= (Button) findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()){
case 0:
Log.e("蛋蛋","--------0");
break;
case 1:
Log.e("蛋蛋","-------1");
break;
case 2:
Log.e("蛋蛋","-------2");
break;
}
}
});
要是有break,那view.getId()等于0的时候,只打印0,不会执行1和2咯
第三.要是添加上default:语句,但是没有break,如下
start= (Button) findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (0){
case 0:
Log.e("蛋蛋","--------0");
case 1:
Log.e("蛋蛋","-------1");
case 2:
Log.e("蛋蛋","-------2");
default:
Log.e("蛋蛋","-------3");
}
}
});
要是条件给出的是0,它会将0,1,2,3全部执行过去,结果如下
10-19 14:09:11.493 13598-13598/com.myself.zhw.text E/蛋蛋: ——–0
10-19 14:09:11.513 13598-13598/com.myself.zhw.text E/蛋蛋: ——-1
10-19 14:09:11.513 13598-13598/com.myself.zhw.text E/蛋蛋: ——-2
10-19 14:09:11.513 13598-13598/com.myself.zhw.text E/蛋蛋: ——-3
那要是添加了break呢?
代码如下:
start= (Button) findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (0){
case 0:
Log.e("蛋蛋","--------0");
break;
case 1:
Log.e("蛋蛋","-------1");
break;
case 2:
Log.e("蛋蛋","-------2");
break;
default:
Log.e("蛋蛋","-------3");
}
}
});
执行结果如下:
10-19 14:33:55.153 27257-27257/com.myself.zhw.text E/蛋蛋: ——–0
说明当存在default时,当没有case成立的时候就执行default,要是有成立的话,就执行那个case,不再执行default
第四,要是不存在break,而且default不放在最后呢?
start= (Button) findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (1){
default:
Log.e("蛋蛋","-------3");
case 0:
Log.e("蛋蛋","--------0");
case 1:
Log.e("蛋蛋","-------1");
case 2:
Log.e("蛋蛋","-------2");
}
}
});
执行的结果如下:
10-19 14:41:14.003 9674-9674/com.myself.zhw.text E/蛋蛋: ——-1
10-19 14:41:14.013 9674-9674/com.myself.zhw.text E/蛋蛋: ——-2
要是条件值为5呢?
执行结果如下:
10-19 14:42:17.873 12456-12456/com.myself.zhw.text E/蛋蛋: ——-3
10-19 14:42:17.873 12456-12456/com.myself.zhw.text E/蛋蛋: ——–0
10-19 14:42:17.873 12456-12456/com.myself.zhw.text E/蛋蛋: ——-1
10-19 14:42:17.873 12456-12456/com.myself.zhw.text E/蛋蛋: ——-2
要是存在break呢?
start= (Button) findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (5){
default:
Log.e("蛋蛋","-------3");
case 0:
Log.e("蛋蛋","--------0");
break;
case 1:
Log.e("蛋蛋","-------1");
break;
case 2:
Log.e("蛋蛋","-------2");
break;
}
}
});
执行结果如下:
0-19 14:45:05.723 15165-15165/com.myself.zhw.text E/蛋蛋: ——-3
10-19 14:45:05.723 15165-15165/com.myself.zhw.text E/蛋蛋: ——–0
要是把default放最后呢?
start= (Button) findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (5){
case 0:
Log.e("蛋蛋","--------0");
break;
case 1:
Log.e("蛋蛋","-------1");
break;
case 2:
Log.e("蛋蛋","-------2");
break;
default:
Log.e("蛋蛋","-------3");
}
}
});
结果如下:
10-19 14:47:39.013 22338-22338/com.myself.zhw.text E/蛋蛋: ——-3
好了,现在具体的功能自己体会吧,不用总结了。