题目  和错误
比赛规则是:
 选手的得分是:评委评分(百分制) 去掉最高分和最低分后的平均分;
 比赛结果:按得分从小到大排序,得分高的两名选手分别为冠亚军,各奖商品房一套和小轿车一辆。
提示(思路之一):
定义比赛类Race:
设private成员变量: 
   int raceNum, judgeNum;  //选手人数, 评委人数
   double race[10][2]
//其中race[][0]存放选手号(1~raceNum),race[][1]存放选手得分。(最多10名选手)
设public成员方法:
   Race(int n,int m)
   //通过构造函数初始化选手人数和评委人数。
   double computAve()
   //从键盘输入比赛选手的评委评分,计算并返回选手的得分。
   void raceScore()
   //设置选手号1~raceNum,存放到race[i][0]中(i=0~raceNum -1)。
   //调用computAve方法计算比赛所有选手得分,存放到race[i][1]中(i=0~raceNum -1)。
   void raceSort() 
// 实现比赛选手得分从小到大排序,同时对应调整选手号。
   void raceResult()
   // 调用raceScore和raceSort方法,输出选手得分和比赛结果。
   再定义主类RaceScorePro,在main方法中创建比赛类Race的对象,初始化5个选手和5个评委。调用raceResult方法输出比赛的结果。
程序运行结果: 
Exception in thread "main" java.lang.NullPointerException
at com.tttttt.Compete.raceScore(Demo4_4.java:47)
at com.tttttt.Compete.raceResult(Demo4_4.java:80)
at com.tttttt.Demo4_4.main(Demo4_4.java:10)
程序
package com.tttttt;
import java.util.*;
public class Demo4_4 
{
public static void main(String[] args)
{
Compete compete=new Compete(5, 5);
    compete.raceResult(); }}
class Compete
{
Scanner in=new Scanner(System.in);
public Compete(int n,int m)
{
this.raceNum=n;
this.judgeNum=m;
 double race[][]=new double[n][2];//初始化
}

public double computeAvg()
{
double sum=0.0;
double[] grade = new double[judgeNum];

for (int i = 0; i < judgeNum; i++)
grade[i] = in.nextDouble();

Arrays.sort(grade);//小到大排序

for (int s = 1; s < grade.length - 1; s++)
 sum += grade[s];

return sum/judgeNum-2;

}

public void raceScore()
{
for(int i=0;i<raceNum;i++)
race[i][0]=i+1;//选手号
for(int j=0;j<raceNum;j++)
{
System.out.println("请输入第"+race[j][0]+"号选手的评委评分(百分制):");
 race[j][1]=computeAvg();//选手分数
}
 

}
public void raceSort()//选择法
{
double temp[];
int p;
for (int x = 0; x < race.length - 1; x++) 
{
p = x;
for (int y = x + 1; y < race.length; y++)
if (race[p][1] > race[y][1])
p = y;
   if (p != x) 
   {
temp = race[p];
race[p] = race[x];
race[x] = temp;
   } }
}

public void raceResult()
{
raceScore();
System.out.println("选手得分:");
raceSort();
for(int i=race.length;i>0;i--)
    {
    System.out.println(race[i][0]+"号选手得分是"+race[i][1]);
}

System.out.println("比赛的结果:");
System.out.println(race[race.length][0]+"号选手为冠军,将商品房一套");
System.out.println(race[race.length-1][0]+"号选手为亚军,将小轿车一辆");


}

private int raceNum;//选手人数
private int judgeNum;//评委人数
double[][] race;
}

解决方案 »

  1.   

    建议楼主好好看看 java里面的数组操作,大部分的问题都是数组操作
    刚开始报的空指针错误是因为 构造方法里面用的race不是类的变量,你自己开了一个同名的race二维数组,导致后面用类的成员变量race没有初始化import java.util.*;
    public class Demo4_4{    public static void main(String[] args){
            Compete compete=new Compete(5, 5);
            compete.raceResult();
        }}
    class Compete
    {
        Scanner in=new Scanner(System.in);
        
        public Compete(int n,int m){
            this.raceNum=n;
            this.judgeNum=m;
            race=new double[n][2];//初始化 这里进行了修改    }    public double computeAvg(){
            double sum=0.0;
            double[] grade = new double[judgeNum];        for (int i = 0; i < judgeNum; i++)
                grade[i] = in.nextDouble();        Arrays.sort(grade);//小到大排序
            System.out.println(Arrays.toString(grade));
            for (int s = 1; s < grade.length - 1; s++)
                sum += grade[s];
            System.out.println(sum);
            double average=sum/(judgeNum-2);
            System.out.println(average);
            return average; //这里修改过    }    public void raceScore(){
    //        System.out.println(race[0][0]);
            for(int i=0;i<raceNum;i++){
                
                race[i][0]=i+1;//选手号
            }
            for(int j=0;j<raceNum;j++){
                System.out.println("请输入第"+race[j][0]+"号选手的评委评分(百分制):");
                race[j][1]=computeAvg();//选手分数
            }
        }
        public void raceSort()//选择法
        {
            double temp[];
            int p;
            for (int x = 0; x < race.length - 1; x++)
            {
                p = x;
                for (int y = x + 1; y < race.length; y++)
                    if (race[p][1] > race[y][1])
                        p = y;
                if (p != x)
                {
                    temp = race[p];
                    race[p] = race[x];
                    race[x] = temp;
                }        }
        }    public void raceResult()
        {
            raceScore();
            System.out.println("选手得分:");
            raceSort();
            for(int i=race.length-1;i>=0;i--)//这里修改过
            {
                System.out.println(race[i][0]+"号选手得分是"+race[i][1]);
            }        System.out.println("比赛的结果:");
            System.out.println(race[race.length-1][0]+"号选手为冠军,将商品房一套");
            //上下两行都修改过
            System.out.println(race[race.length-2][0]+"号选手为亚军,将小轿车一辆");
        }    private int raceNum;//选手人数
        private int judgeNum;//评委人数
        double[][] race;
    }