java求解一道题?

publicstaticvoidmain(String[]args){inti;intsum=0;for(i=0;i<5;i++){if(i%2>0)continue;s... public static void main(String[] args) {
int i;
int sum = 0;
for (i = 0; i < 5; i++) {
if (i % 2 > 0)
continue;
sum += i;
}
System.out.println(sum);

}

}
上面这个公式的结果是6,但我不明白为什么是6,我用了单步调试,看每部的结果,
但是还是有点不懂,毕竟单步调试之结算结果并不显示桌面计算,我把我自己算的打出来,各位看看对不对,
int i=0,i>5,i++,
也就是循环5次,
第一次0:int=0满足if (i % 2 > 0)所以计算下面的sum+=i
也就是0=0+0; 结果:sum=0, i=0

第二次1:int=1 不满足if (i % 2 > 0)1%2除余=10 不计算下面的sum+=i
结果sum=0,i=1;

第三次2:int=2满足if (i % 2 > 0)2%2除余=0计算下面的sum+=i
(计算的结果sum)2=(初始sum)0+(本次i)2;结果sum=2,i=2;

第四次3:int=3不满足if (i % 2 > 0)不计算下面的sum+=i;
结果sum=2,i=3;

第五次4:int=4满足if (i % 2 > 0)计算下面的sum+=i
(计算的结果sum)6=(上次运算的sum)2+(本次i)4;结果sum=6,i=4;

第六次5:int i=0<5次,所以退出循环!
输出最后一次结果为6,是这样吗?
但是满足的3次都是除余为0,怎么满足呢?没有说>=0,而是说>0,怎么能continue呢?
展开
 我来答
栾涵桃
2011-05-14 · TA获得超过362个赞
知道小有建树答主
回答量:656
采纳率:0%
帮助的人:0
展开全部
//共分16次糖,老师拿出68颗糖;小朋友平均有18颗糖

package javatest;

public class Main {//主类

/** Creates a new instance of Main */
public Main() {//主类构造函数,可以不写
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {//主程序
// TODO code application logic here
Little little1=new Little();//这是个解决该问题的类
//System.out.println("Hello world!");
int times=0;//这是循环次数
do{
little1.runOnce();//10个小朋友循环操作一次
times++;//循环次数加1
}while(!little1.isAllSame());//直到所有的小朋友糖数一样为止
//后边是打印结果
System.out.println("Total running times: "+times);
System.out.println("The teacher will offer "+little1.getTeacherSug()+" sugars.");
System.out.println("Students will have "+little1.getSugar()+" sugars.");
}

}

//主类亏唯
class Little{
private int[] numSugar;//记录小朋友的糖数
private int teacher;//记录老师拿出来的糖数
public Little(){
numSugar=new int[];//这是最开始小朋友的糖数
teacher=0;//最开始老师没有拿出糖
}
public int getTeacherSug()//这是读取老师给的糖数
public boolean isAllSame(){//判断所有的小朋友糖数是否一样
//基本思想:总共有0,1,2,...n-1个小朋友,看1一直到n-1个人的糖数是否与他前一个人的糖数一致。
for(int i=1;i<numSugar.length;i++){
if(numSugar[i]!=numSugar[i-1])//如果不一致,糖数肯定不一样,返回false
return false;
}
return true;//否则,所有人糖数一样
}
public int getSugar()//只有当糖数一样时才能调用,卖戚返回小朋友的糖数

//运行一个循环
public void runOnce(){
//已开始,每个小朋友的糖数减半
for(int i=0;i<numSugar.length;i++){
numSugar[i]=numSugar[i]/2;
}
//然销配培后从最后一个小朋友开始,加上前一个人的糖数就是现在的糖数.第一个小朋友要加上最后一个小朋友的糖数,所以先把最后一个人的糖数保存起来
int lastSugar=numSugar[numSugar.length-1];//最后一个人的
for(int i=numSugar.length-1;i>0;i--){//从n-1一直到第二个人
numSugar[i]+=numSugar[i-1];
}
numSugar[0]+=lastSugar;//第一个人的

//看是否要向老师要糖
for(int i=0;i<numSugar.length;i++){
if(numSugar[i]%2!=0){//如果不是偶数
numSugar[i]++;//向老师要一个
teacher++;//老师的糖数+1
}
}
//完了
}

}
kengzcn
2011-05-13 · TA获得超过304个赞
知道答主
回答量:238
采纳率:100%
帮助的人:219万
展开全部
我觉得楼主你是自己糊涂自己。1除以2取余肯定是>0的,所以满足你if里面的条件,所以执行continue语句跳出一次循环。2除饥拍喊以2取余是满足<=0的,因此不贺纯满足你if里面的条件,顺序执行sum+=i这条语句。不明白你还有什么疑问。 只有满足你if里面的条件才执行continue语句,一切不满足if里面条件烂野的都顺序执行continue下面的语句。
追问
确实是我算错了!
应该是满足条件是执行continue继续循环,如果不满足则运算sum+=i,然后0.2.4次都不满足,然后执行sum+,三次结果为0,2,6;1,3次都满足执行continue跳出一次进行下次循环,第五次<5所以不再循环!这样对吗?
追答
对的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式