package bmd.jsj.rj.oo1;import java.io.*;public class JiSuanFen { /**
 * 功能:有8个裁判进行打分,去掉一个最高分,
 *          去掉一个最低分,最后得分为剩下的6个的平均分
 * 作者:jacob
 * 时间:2011年10月17日 11:51:57
 */
public static void main(String[] args) {
Judge judge = new Judge();

System.out.println(judge.lastFen());
}}
class Judge{
float arr[]=null;
int size=8;
public Judge(){
arr=new float[size];
try{
for(int i=0;i<arr.length;i++){
System.out.println("请输入第"+(i+1)+"个裁判打的分数:");
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
            arr[i]=Float.parseFloat(buf.readLine());
}
}
catch(Exception e){
System.out.println(e.toString());
}
}
public float lastFen(){
float allFen=0;
int min=this.minFens();
int max=this.maxFens();
for(int m=0;m<arr.length;m++){
if(m!=min&&m!=max){

allFen+=arr[m];
}
}
System.out.println("最后得分为:");
return allFen/(arr.length-2);

}
public int minFens(){
int minIndex=0;
float minFen=arr[0];
for(int i=0;i<arr.length;i++){
if(minFen>arr[i]){
minFen=arr[i];
minIndex=i;
}
}

return minIndex;
}
public int maxFens(){
int maxIndex=0;
float maxFen=arr[0];
for(int i=0;i<arr.length;i++){
if(maxFen<arr[i]){
maxFen=arr[i];
maxIndex=i;
}
}

return maxIndex;
}
}
当输入为如下时出现错误答案:
请输入第1个裁判打的分数:
10
请输入第2个裁判打的分数:
10
请输入第3个裁判打的分数:
10
请输入第4个裁判打的分数:
10
请输入第5个裁判打的分数:
10
请输入第6个裁判打的分数:
10
请输入第7个裁判打的分数:
10
请输入第8个裁判打的分数:
10
最后得分为:
11.666667
怎么修改这个程序,高人指点,感激不尽!!!!

解决方案 »

  1.   

    这里因为10个分数都相等 
    所以 int min=this.minFens();
        int max=this.maxFens();
    min==max本来要去掉一个最低和一个最高,现在就变成去掉了1个数 所以就变成7个数相加/6
    所以判断 当min==max 说明8个数都相等 那就max=min+1 就好了
    为了防止下表越界 你要保证 max不能超过7哦
      

  2.   


    public float lastFen(){
    float allFen=0;
    int min=this.minFens();
    int max=this.maxFens();
    if(min==max)//如果当最高最低取得同一个下标,MAX下标加1
    max=max+1;
    for(int m=0;m<arr.length;m++){
    if(m!=min&&m!=max){ allFen+=arr[m];
    }
    }