当前位置:编程学习 > JAVA >>

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那个删除数据库中的函数名字

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,