import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
import java.io.*;
import java.util.Arrays;
public class Part3{
final static int SIZE=300;
static StudentRecord[] record=new StudentRecord[SIZE];
static int reamount;
public static void main(String[] args)
{
if(args.length!=1)
{
System.out.println("An input filename must be specified as a command line argument");
System.exit(1);
}
String filename = args[0];
FileReader fileInput = null;
try {
fileInput = new FileReader(filename);
}
catch(Exception e){
System.out.println("Failed to get file because" + e);
System.exit(1);
}
process(fileInput);
sort();
print(record);
try{
fileInput.close();
}catch(IOException ioe){}
}
public static void process(FileReader fileinput)
{
int i=0;
BufferedReader input = new BufferedReader(fileinput);
for(;;i++)
{
String line =null;
try{
line = input.readLine();
}
catch(IOException ioe) {}
if((line== null)||line.equals("")){
break;
}
StringTokenizer l = new StringTokenizer(line);
String id=new String(l.nextToken());
String name=l.nextToken();
String init=l.nextToken();
double[] Emark=new double[6];
for(int j=0;j<6;j++)
{
Emark[j]=Double.parseDouble((String)l.nextToken());
}
record[i]=new StudentRecord(id,name,init,Emark[0],Emark[1],Emark[2],Emark[3],Emark[4],Emark[5]);
}
reamount=i;
try {
input.close();
}
catch(IOException ioe) {}
}
public static int scaleMark(double examMark, double totalMark)
{
// SITACS authorized fudging of marks to downgrade assignments
// when exam result suggests student probably didnt do the assignment work
double finalMark = 0.0;
if(examMark >= 25.0) { finalMark = totalMark; }
else {
double assignmentMark = totalMark - examMark;
finalMark = examMark + (examMark*assignmentMark)/25.0;
}
// Further fudging of marks to avoid tiresome appeals from pestilential students
if((finalMark >=43.0)&&(finalMark<45.0))finalMark=45.0;
else
if((finalMark >=48.0) &&(finalMark<50.0))finalMark=50.0;
else
if((finalMark>=63.5 )&& (finalMark<65.0))finalMark=65.0;
else
if((finalMark>=73.5) && (finalMark<75.0))finalMark=75.0;
else
if((finalMark>=83.5) && (finalMark<85.0))finalMark=85.0;
return ((int)(finalMark+0.5)); // round to nearest integer
}
//function to sort the record according to the final exam mark
private static void sort()
{
Arrays.sort((object[])record);
}
private static void print(StudentRecord[] srecord)
{
for(int i=reamount-1;i>=0;i--)
{
System.out.println(srecord[i].toString());
}
}
}
//* definition for StudentRecord class
class StudentRecord implements Comparable
{
private String sid,sname,sinit;
private double []mark=new double [6];
private int markfinal;
//constructor
StudentRecord( String id, String name, String init,double mark1, double mark2, double mark3, double mark4, double mark5, double mark6)
{
sid=id;
sname=name;
sinit=init;
mark[0]=mark1;
mark[1]=mark2;
mark[2]=mark3;
mark[3]=mark4;
mark[4]=mark5;
mark[5]=mark6;
double totalmark=0.0;
for(int index=0;index<6;index++)
{
totalmark+=mark[index];
}
markfinal=Part3.scaleMark(mark[5],totalmark);
}
//String toString() function to return the student record
public String toString()
{
String temp=new String();
temp=sid+\t+sname+\t+sinit+\t+String.valueOf(markfinal);
return(temp);
}
public int compareTo(Object o)
{
StudentRecord other=(StudentRecord)o;
long result=markfinal-other.markfinal;
if(result!=0)
return (int) result;
result=sname.compareTo(other.sname);
if(result!=0)
return (int) result;
result=sinit.compareTo(other.sinit);
if(result!=0)
return (int) result;
result=sid.compareTo(other.sid);
return (int) result;
}
}
编译后报错::
java.lang.NullPointerException
at StudentRecord.compareTo(Part3.java:155)
at java.util.Arrays.mergeSort(Arrays.java:1124)
at java.util.Arrays.mergeSort(Arrays.java:1131)
at java.util.Arrays.mergeSort(Arrays.java:1131)
at java.util.Arrays.mergeSort(Arrays.java:1132)
at java.util.Arrays.mergeSort(Arrays.java:1131)
at java.util.Arrays.mergeSort(Arrays.java:1132)
at java.util.Arrays.mergeSort(Arrays.java:1132)
at java.util.Arrays.sort(Arrays.java:1074)
at Part3.sort(Part3.java:102)
at Part3.main(Part3.java:31)
Exception in thread "main" Process completed with exit code 1
究竟错在哪里了。大家帮帮忙我很急的!!!
十万火急!!!
final static int SIZE=136;
Arrays操作的对象不能为空
改了之后就没问题了