一个求平均值的程序,请问出错在哪里

import acm.program.*;
public class AverageList extends ConsoleProgram{
public static final int sentinel=-1;
public void run(){
println("the program averagelist");
println("enter value "+sentinel+" to stop the program");
double ave=0;
int sum=0;
int n=0;
while(true){
int vaule=readInt();
int i=n++;
sum+=vaule;
ave=sum/i;
if(vaule==sentinel)break;
}
println("the averaage is"+ave);
}
}

你之前的程序里实在循环里边写的int i = n++;所以每次循环的时候i都是从新定义的,并且你n++还是先复制给i的所以每次循环都是除的0,所以会报错

我把程序改成如下后,即可成功运行
import acm.program.*;
public class AverageList extends ConsoleProgram{
public static final int sentinel=-1;
public void run(){
println("the program averagelist");
println("enter value "+sentinel+" to stop the program");
double ave=0;
int sum=0;
int n=0;
while(true){
int vaule=readInt();
if(vaule==sentinel)break;
n++;
sum+=vaule;
ave=sum/n;
}
println("the averaage is "+ave);
}
}

但是为什么加上 i 之后程序会出错?

 ave=sum/i;//这里会先取整再转double
 这句改一下
 ave=sum*1.0/i;

sum是整型,i也是整型,相除的话会把小数部分去掉,同上

是不是i=n++;是先把n赋值给i,n再+1;所以除以i实际并不是除以n。

i=n++; 先引用再自加,所以i=0,n=n+1,所以会出现参数错误异常