Switch 没有break和default位置乱放情况分析

package flowcontrol;

public class SwitchCase {
// first default
public static void testFirst(int i) {
switch (i) {
default:
System.out.println("default");// first default
case 1:
System.out.println("one");
case 2:
System.out.println("two");
case 3:
System.out.println("there");
}
}

// last default
public static void testLast(int i) {
switch (i) {
case 1:
System.out.println("one");
case 2:
System.out.println("two");
case 3:
System.out.println("there");
default:
System.out.println("default");// last default
}
}

// middle default
public static void testMiddle(int i) {
switch (i) {
case 1:
System.out.println("one");
case 2:
System.out.println("two");
default:
System.out.println("default");// middle default
case 3:
System.out.println("there");

}
}

public static void main(String[] args) {
// first default
testFirst(2);
System.out.println("------------------");
testFirst(9);

System.out.println("|||||||||||||||||||||||||||||||||||");

// last default
testLast(2);
System.out.println("----------------");
testLast(9);

System.out.println("|||||||||||||||||||||||||||||||||||");
// middle default
testMiddle(2);
System.out.println("----------------");
testMiddle(9);

}

}



输出结果是什么呢,看了结果,我是这么理解的:
(1)switch语句关键地方是进入点,有了进入点没有break的情况下会执行到底
(2)没有匹配值的时候default就是进入点,进入default以后会和普通进入点一样,如果没有break继续执行下面语句
two
there
------------------
default
one
two
there
|||||||||||||||||||||||||||||||||||
two
there
default
----------------
default
|||||||||||||||||||||||||||||||||||
two
default
there
----------------
default
there
#include <STC15F2K60S2.H> #include <string.h> #define Y4C(x) {P0=x;P2=P2&0x1f|0x80;P2=0x1f;} #define Y5C(x) {P0=x;P2=P2&0x1f|0xa0;P2=0x1f;} #define Y6C(x) {P0=x;P2=P2&0x1f|0xc0;P2=0x1f;} #define Y7C(x) {P0=x;P2=P2&0x1f|0xe0;P2=0x1f;} unsigned char led_state=0xff; unsigned char y5c_state=0x00; unsigned long int num0=0; unsigned long int n=0; unsigned char num=0; unsigned char Nixie_value[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; code unsigned char Seg_Table[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E}; unsigned char cnt_key=0; unsigned char cnt_nixie=0; unsigned char cnt_led=0; unsigned int cnt_19; unsigned int cnt_4; unsigned int cnt_shanshuo; unsigned int cnt_7; unsigned int cnt_2; unsigned int cnt_18; unsigned char flag_show; bit flag_19; bit flag_wake; bit flag_4; bit flag_18; void Timer0_Init(void) //1毫秒@12.000MHz { AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0x18; //设置定时初始值 TH0 = 0xFC; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; //使能定时器0中断 } void System_Init() { Y4C(0xff); Y5C(0x00); Y6C(0xff); Y7C(0xff); Timer0_Init(); EA=1; } unsigned char Key_scan() { unsigned char key_value; unsigned int key_temp=0; P3|=0x0f; P44=0;P42=1;P35=1;P34=1; key_temp=P3&0x0f; P44=1;P42=0;P35=1;P34=1; key_temp=(key_temp<<4)|(P3&0x0f); P44=1;P42=1;P35=0;P34=1; key_temp=(key_temp<<4)|(P3&0x0f); P44=1;P42=1;P35=1;P34=0; key_temp=(key_temp<<4)|(P3&0x0f); switch(~key_temp) { case 0x8000:key_value=4;break; case 0x4000:key_value=5;break; case 0x2000:key_value=6;break; case 0x1000:key_value=7;break; case 0x0800:key_value=8;break; case 0x0400:key_value=9;break; case 0x0200:key_value=10;break; case 0x0100:key_value=11;break; case 0x0080:key_value=12;break; case 0x0040:key_value=13;break; case 0x0020:key_value=14;break; case 0x0010:key_value=15;break; case 0x0008:key_value=16;break; case 0x0004:key_value=17;break; case 0x0002:key_value=18;break; case 0x0001:key_value=19;break; default:key_value=0; } return key_value; } void Nixie_show() { static unsigned char pos=0; Y7C(0xff); Y6C(0x01<<pos); Y7C(Nixie_value[pos]); if(++pos>=8) pos=0; } void Nixie() { if(cnt_nixie<90) return; cnt_nixie=0; memset(Nixie_value,0xff,8); if(flag_wake==1) { if(flag_show==1) { Nixie_value[0]=0xc6; Nixie_value[2]=num0>=100000 ? Seg_Table[num0/100000%10]:0xff; Nixie_value[3]=num0>=10000 ? Seg_Table[num0/10000%10]:0xff; Nixie_value[4]=num0>=1000 ? Seg_Table[num0/1000%10]:0xff; Nixie_value[5]=num0>=100 ? Seg_Table[num0/100%10]:0xff; Nixie_value[6]=num0>=10 ? Seg_Table[num0/10%10]:0xff; Nixie_value[7]=num0>=0 ? Seg_Table[num0%1]:0xff; y5c_state&=0xef; }else if(flag_show==2){ Nixie_value[0]=0x88; Nixie_value[4]=0xc0; Nixie_value[5]=0x8c; Nixie_value[6]=0x86; Nixie_value[7]=0xc8; y5c_state=0x10; }else if(flag_show==3){ Nixie_value[0]=0x86; y5c_state&=0xef; if(cnt_shanshuo>=500) { Nixie_value[3]=0x8e; Nixie_value[4]=0x88; Nixie_value[5]=0xc1; Nixie_value[6]=0xc7; Nixie_value[7]=0xf8; }else if(cnt_shanshuo<500){ Nixie_value[3]=Nixie_value[4]=Nixie_value[5]=Nixie_value[7]=Nixie_value[7]=0xff; } }else if(flag_show==4){ Nixie_value[0]=0x92; Nixie_value[2]=Seg_Table[n/100000%10]; Nixie_value[3]=Seg_Table[n/10000%10]; Nixie_value[4]=Seg_Table[n/1000%10]; Nixie_value[5]=Seg_Table[n/100%10]; Nixie_value[6]=Seg_Table[n/10%10]; Nixie_value[7]=Seg_Table[n%1]; y5c_state&=0xef; } }else{ memset(Nixie_value,0xff,8); } } void LED() { if(cnt_led<100) return; cnt_led=0; if(flag_show==1) led_state=0xfe; else if(flag_show==2) led_state=0xfd; else if(flag_show==3) led_state=0xfb; else if(flag_show==4) led_state=0xf7; else if(flag_18) led_state=0xbf; else if(flag_wake) led_state=0x7f; else led_state=0xff; Y4C(led_state); } void Key() { unsigned char key_val,key_down,key_up; static unsigned char key_old=0; if(cnt_key<10) return; cnt_key=0; key_val=Key_scan(); key_down=key_val&(key_val^key_old); key_up=~key_val&(key_val^key_old); key_old=key_val; switch(key_down) { case 16:flag_wake=1;flag_show=1;break; case 8:num=0;break; case 5:num=1;break; case 9:num=2;break; case 13:num=3;break; case 10:num=5;break; case 14:num=6;break; case 7:num=7;break; case 11:num=8;break; case 15:num=9;break; case 19:flag_19=1;break; case 17:if(flag_show==4) flag_show=2; num0=0; break; case 4:flag_4=1;break; case 12:if(flag_show==1) { if(n==num) flag_show=2; else flag_show=3; } case 18:if(flag_show==4) flag_18=1; } switch(key_up) { case 19:flag_19=0; if(cnt_19>=2000) { flag_show=4; cnt_19=0; } break; case 4:flag_4=0; if(cnt_4>=1000) { num0=0; cnt_4=0; }else{ num0=num0/10; } break; } num0=10*num0+num; } void main() { System_Init(); while(1) { Nixie(); Key(); LED(); } } void Timer0_Isr(void) interrupt 1 { Nixie_show(); Y5C(y5c_state); if(cnt_key<10) cnt_key++; if(cnt_nixie<90) cnt_nixie++; if(cnt_led<100) cnt_led++; if(flag_19) cnt_19++; if(flag_4) cnt_4++; if(flag_show==3) { if(cnt_7<3000) cnt_7++; else { cnt_7=0; flag_show=1; } if(cnt_shanshuo<1000) cnt_shanshuo++; else cnt_shanshuo=0; } if(flag_show==2) { if(cnt_2<5000) cnt_2++; else { cnt_2=0; flag_show=1; } } if(flag_18) { if(++cnt_18==2000) { cnt_18=0; flag_18=0; } } }为什么按键输入数字进去后是乱的
最新发布
11-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值