刚学java不久碰到循环的问题,我的结果与参考的结果同,请问谁知道为什么不同呢 ??
题目如下:有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,几天可以卖完?
我编的如下,得出的是8天卖完:
 int total=1020;
 int day=0;
 boolean sale=true;
 while (sale)
 {
   day=day+1;
   total=total/2-2;
   if(total==0)
   sale=false;
}
System.out.println("1020个西瓜总共用了 "+day+" 天卖完");
参考答案如下 ,要用9天卖完:
 int last=0;
 last=1020/2+2;
 int i=0;
 for(i=1;last>=0;i++)
 {
    last=last-(last/2+2);
 }
 System.out.println("需要的天数"+i);
}

解决方案 »

  1.   

    for(i=1;last>=0;i++)
    last==0; 没的卖了,还卖呢。我觉的楼主正确。
      

  2.   

    应该是8天。
    if(total==0)
    应该改成total<=0
      

  3.   

    答案有问题。因为它用时多加了一次。
    for (i = 1; last >= 0; i++) {
    last = last - (last / 2 + 2);
    }
    转换为while循环则是
    while (true) {
    last = last - (last / 2 + 2);
    day++;
    }这个是,当last为0的时候,应该跳出循环了,但是它没有做验证,而继续加了一次day(时间)
    if(total==0)
        sale=false;
    而你这段代码,就完成了这次验证。
      

  4.   

    递归方式也可以这样实现: public static int sale(int xigua) {
    if (xigua == 0) { // 西瓜没有的时候,就不卖了!
    return 0;
    }
    return 1 + sale(xigua/2 - 2); // 否则计数加1,继续卖
    }
      

  5.   


    public int getDay(int n) {
    int day = 0;
    while (n > 0) {
    n = n / 2 - 2;
    day++;
    } return day;
    }
      

  6.   


    这样有问题,有可能xigua < 0 ,到时候就悲剧了。