日期:2014-05-20  浏览次数:20678 次

一道编程题,怎么运行不正确?
public   class   watermelon   {  

/**  
*   有1020个西瓜,第一天卖一半多2个,以后每天卖剩下的一半多2个,  
*   问几天以后能卖完  
*/  
public   static   void   main(String[]   args)   {  
int   x1,x2,day;  
x1=1020;  
day=0;  

while(x1==0){  
x2=x1/2-2;  
x1=x2;  
day++;}  
System.out.println( "the   day   is   "+day);  

//   TODO   Auto-generated   method   stub  

}  

}  


运行出错误~但是我怎么也看不出来,望指点!!

------解决方案--------------------
public static void main(String[] args) {
int total = 1020;
int totalSales = 0;
int totalLeft = 1020
int days = 0;

while(totalLeft > 0){
totalSales += totalLeft/2 + 2;
totalLeft = total - totalSales;
days++;
}

System.out.println( "the day is " + day);

// TODO Auto-generated method stub

}

}
------解决方案--------------------
你卖完那天不一定是正好x1=0,所以那样是不对的,而应该统计卖出总数大于等于1020个
------解决方案--------------------
将while(x1==0)
改为while(x1> =0)就行了, 原因和JAVA的除法规则有关
------解决方案--------------------
while(x1==0)

这句话的意思是当x1变量的值为0的时候才执行while循环的语句

改成将while(x1> 0)
就可以了!
------解决方案--------------------
public class watermelon {

/**
* 有1020个西瓜,第一天卖一半多2个,以后每天卖剩下的一半多2个,
* 问几天以后能卖完
*/
public static void main(String[] args) {
int x1,x2,day;
x1=1020;
day=0;

while(x1!=0){
x2=x1/2-2;
x1=x2;
day++;}
System.out.println( "the day is "+day);

// TODO Auto-generated method stub

}

}
答案是8天
------解决方案--------------------
楼上的这样如果把x2=x1/2-2改成x2=x1/2-3,即每天买出一半多三个程序就死了呢。

while(x1> =0){
x2=x1/2-2;
x1=x2;
day++;}

------解决方案--------------------
不对吧!
while(x1!=0){
x2=x1-(x1/2-2);
x1=x2;
day++;}
------解决方案--------------------
x1=0的时候已经卖完了.应该是

while(x1> 0){
x2=x1-(x1/2-2);
x1=x2;
day++;}