当前位置: 代码迷 >> J2EE >> java有关问题 求解
  详细解决方案

java有关问题 求解

热度:99   发布时间:2016-04-22 00:43:40.0
java问题 求解啊
题目 和错误


比赛规则是:
? 选手的得分是:评委评分(百分制) 去掉最高分和最低分后的平均分;
? 比赛结果:按得分从小到大排序,得分高的两名选手分别为冠亚军,各奖商品房一套和小轿车一辆。
提示(思路之一):
定义比赛类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;
}












------解决方案--------------------
建议楼主好好看看 java里面的数组操作,大部分的问题都是数组操作
刚开始报的空指针错误是因为 构造方法里面用的race不是类的变量,你自己开了一个同名的race二维数组,导致后面用类的成员变量race没有初始化

Java code
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;}
  相关解决方案