java求解一道题?
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呢?
追问:确实是我算错了!
应该是满足条件是执行continue继续循环,如果不满足则运算sum+=i,然后0.2.4次都不满足,然后执行sum+,三次结果为0,2,6;1,3次都满足执行continue跳出一次进行下次循环,第五次<5所以不再循环!这样对吗?
答案:我觉得楼主你是自己糊涂自己。1除以2取余肯定是>0的,所以满足你if里面的条件,所以执行continue语句跳出一次循环。2除以2取余是满足<=0的,因此不满足你if里面的条件,顺序执行sum+=i这条语句。不明白你还有什么疑问。 只有满足你if里面的条件才执行continue语句,一切不满足if里面条件的都顺序执行continue下面的语句。
其他://共分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
}
}
//完了
}
}
上一个:三峡大学理学院 信息与计算科学 学java吗??
下一个:求java连接mysql那个删除数据库中的函数名字