{
public static class Member
{
private String name;
private int age;
public Member(String x,int y){
name=x;
age=y;
}
public int compareTo(Member a){
if(a.getAge()>age)
return 1;
else if (age<a.getAge())
return -1;
else return 0;
}
public String getName(){return name;}
public int getAge(){return age;}
}
public static void sortMember(Member [] a,int l){
for (int j = 0; j < l-1; j++) {
if (a[j].compareTo(a[(j+1)]) > 0) {
Member temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}}
}
public static void main(String[] args)
{
String name[]=new String[7];
int age[]=new int[7];
for(int x=0,y=0;x<14;x+=2,y++){
name[y]=args[x];
age[y]=Integer.parseInt(args[x+1]);}
Member [] s= new Member[7];
for(int i =0;i< (s.length -1);i++){
s[i]=new Member(name[i],age[i]);
}
for(int count =0;count< (s.length -1);count++){
System.out.println(s[count].getName()+" "+s[count].getAge());
}
sortMember(s,s.length);
for(int count =0;count< (s.length -1);count++){
System.out.println(s[count].getName()+" "+s[count].getAge());
}
}}
命令行参数:爱丽丝15鲍勃55猫56大卫63埃兰37范妮75海伦55
输出:
Alice 15
Bob 55
Cat 56
David 63
Elan 37
Fanny 75
Exception in thread "main" java.lang.NullPointerException
at TestAsg1Q1$Member.compareTo(TestAsg1Q1.java:16)
at TestAsg1Q1.sortMember(TestAsg1Q1.java:30)
at TestAsg1Q1.main(TestAsg1Q1.java:55)
答案 0 :(得分:0)
您的sort方法不需要传递数组的长度,因为您传递的是数组,您可以直接从该方法访问该属性。
但是,当j的if (a[j].compareTo(a[(j+1)])
的值为6时,您尝试访问不存在的索引7处的数组a
。
如果使用的是IDE(Netbeans,Eclipse,Intellij),则可以在sort方法的for循环的第一行中设置一些断点,并检查每次迭代的变量值,直到错误弹出。 / p>