刚学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);
}
题目如下:有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);
}
last==0; 没的卖了,还卖呢。我觉的楼主正确。
if(total==0)
应该改成total<=0
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;
而你这段代码,就完成了这次验证。
if (xigua == 0) { // 西瓜没有的时候,就不卖了!
return 0;
}
return 1 + sale(xigua/2 - 2); // 否则计数加1,继续卖
}
public int getDay(int n) {
int day = 0;
while (n > 0) {
n = n / 2 - 2;
day++;
} return day;
}
这样有问题,有可能xigua < 0 ,到时候就悲剧了。