下面的代码有漏洞,高人指点下,谢谢!!!

yagubai_88 2011-10-17 03:35:11
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


怎么修改这个程序,高人指点,感激不尽!!!!
...全文
94 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yagubai_88 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 nizhicheng 的回复:]
Java code


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<a……
[/Quote]

请输入第1个裁判打的分数:
10
请输入第2个裁判打的分数:
10
请输入第3个裁判打的分数:
10
请输入第4个裁判打的分数:
10
请输入第5个裁判打的分数:
10
请输入第6个裁判打的分数:
10
请输入第7个裁判打的分数:
10
请输入第8个裁判打的分数:
10
最后得分为:
10.0


验证通过
yagubai_88 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 nizhicheng 的回复:]
Java code


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<a……
[/Quote]

非常感谢你的精彩回答,我懂了……
wtc860104 2011-10-17
  • 打赏
  • 举报
回复
搞个裁判类
再搞个计分器
再搞个计分方案
OK
nizhicheng 2011-10-17
  • 打赏
  • 举报
回复

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];
}
}
nizhicheng 2011-10-17
  • 打赏
  • 举报
回复
这里因为10个分数都相等
所以 int min=this.minFens();
int max=this.maxFens();
min==max本来要去掉一个最低和一个最高,现在就变成去掉了1个数 所以就变成7个数相加/6
所以判断 当min==max 说明8个数都相等 那就max=min+1 就好了
为了防止下表越界 你要保证 max不能超过7哦

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧