当前位置: 代码迷 >> J2SE >> 阅读下列程序段,写出程序结束后变量sum的值。该怎么解决
  详细解决方案

阅读下列程序段,写出程序结束后变量sum的值。该怎么解决

热度:23   发布时间:2016-04-24 00:49:13.0
阅读下列程序段,写出程序结束后变量sum的值。
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum=0,i;
for (i=1;i<=4;i++) {
switch (i) {
case 1:
sum=sum+2;
case 2:
sum=sum+4;
continue;
case 3:
sum=sum+16;
break;
}

}
}

大哥大姐,要怎么理解啊,求详细解答,附注释。

------解决方案--------------------
int sum=0,i; //z这里就是 int sum =0 ;int i = 0;一个意思 
for (i=1;i<=4;i++) {//for循环
switch (i) {//传入i比较
case 1://i是否等于1
sum=sum+2;
case 2://
sum=sum+4;
continue;//继续执行
case 3:
sum=sum+16;
break;//跳出for
}
------解决方案--------------------
switch case穿透。查下就明白了

------解决方案--------------------
int sum=0,i; //z这里就是 int sum =0 ;int i = 0;一个意思
for (i=1;i<=4;i++) {//for循环
switch (i) {//传入i比较
case 1://i是否等于1
sum=sum+2;
case 2://
sum=sum+4;
continue;//继续执行
case 3:
sum=sum+16;
break;//跳出for
}

你在每一个case 的第一句加上一个System.out.println(...)就很清楚程序是怎么运行的
------解决方案--------------------
Java code
public static void main(String[] args) {    // TODO Auto-generated method stub    int sum=0,i;    for (i=1;i<=4;i++) {        switch (i) {        case 1:            sum=sum+2;    //没有任何转移说明,则接续执行下面的语句        case 2:            sum=sum+4;            continue;    //遇到这个就说明循环结构的下面代码就不执行了,直接执行i++,然后判断        case 3:            sum=sum+16;            break;        //遇到这个就说明循环结构到头了,马上就要跳出循环了        }    }}
------解决方案--------------------
探讨

Java code

public static void main(String[] args) {
// TODO Auto-generated method stub
int sum=0,i;
for (i=1;i<=4;i++) {
switch (i) {
case 1:
sum=sum+2; //……

------解决方案--------------------
int sum=0,i; //z这里就是 int sum =0 ;int i = 0;一个意思
for (i=1;i<=4;i++) {//for循环
switch (i) {//传入i比较
case 1://i是否等于1
 sum=sum+2;
 case 2://
 sum=sum+4;
 continue;//继续执行
case 3:
 sum=sum+16;
 break;//跳出for
 }
------解决方案--------------------
int sum=0,i; 与 int sum=0;int i=0;
不可同日而语。
前者i是没有初始化的,后面在使用前必须初始化,否则编译器报错。

探讨
int sum=0,i; //z这里就是 int sum =0 ;int i = 0;一个意思
for (i=1;i<=4;i++) {//for循环
switch (i) {//传入i比较
case 1://i是否等于1
sum=sum+2;
case 2://
sum=sum+4;
continue;//继续执行
case 3:
sum=sum+16;
break;//……

------解决方案--------------------
当i=1时,执行sum=sum+2;sum=sum+4;continue;此时sum=6
当n=2时,执行sum=sum+4;continue;此时sum=10
当n=3时,执行sum=sum+16;break;
当n=4时,什么都没有执行
如果swith语句放在循环中则可以正常使用continue关键词。在这里break依然用来结束switch语句;而continue则结束本次循环,跳到循环语句的判断处,continue后面的语句都不执行。

楼主可以试试把代码稍微修改成这个样子
Java code
public class sdafasd {    public static void main(String[] args) {        // TODO Auto-generated method stub        int sum = 0, i;        for (i = 1; i <= 4; i++) {            switch (i) {            case 1:                sum = sum + 2;            case 2:                sum = sum + 4;                continue;            case 3:                sum = sum + 16;                break;            }            System.out.println(i);        }        System.out.println(sum);    }}
  相关解决方案