求解,下面这段程序我标出来的地方怎么会有空指针异常

原问题:求解,下面这段程序我标出来的地方怎么会有空指针异常
分类:编程开发 > 最后更新时间:【2017-07-26 14:16:48】
问题补充:

package com.java.day13;

import java.util.Comparator;

import java.util.Set;

import java.util.TreeMap;

public class Practice2 {

public static void main(String[] args) {

TreeMap a = new TreeMap(new Comparator() {

@Override

public int compare(Object o1, Object o2) {

if(o1 instanceof students && o2 instanceof students) {

students p1 = (students)o1;

students p2 = (students)o2; |-------------------------|

int i = (p1.getNumber().compareTo(p2.getNumber())); ----------> |这里总是报空指针异常 |

if(i != 0) { |------------------------|

return i;

}else {

i = p1.getName().compareTo(p2.getName());

if(i != 0) {

return i;

}

}

}

return 0;

}

});

a.put(new students("King"), 100);

a.put(new students("Kin"), 90);

a.put(new students("Ki"), 80);

a.put(new students("K"), 70);

Set s = a.entrySet();

for(Object o:s) {

System.out.println();

}

}

}

class students{

private String name;

private Integer number;

public students(String students) {

this.name= students;

}

public students(String name, Integer number) {

super();

this.name = name;

this.number = number;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getNumber() {

return number;

}

public void setNumber(Integer number) {

this.number = number;

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + ((name == null) ? 0 : name.hashCode());

result = prime * result + ((number == null) ? 0 : number.hashCode());

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

students other = (students) obj;

if (name == null) {

if (other.name != null)

return false;

} else if (!name.equals(other.name))

return false;

if (number == null) {

if (other.number != null)

return false;

} else if (!number.equals(other.number))

return false;

return true;

}

@Override

public String toString() {

return "students [name=" + name + ", number=" + number + "]";

}

}

最佳答案

你把

public students(String students) {

this.name= students;

}

这段代码删除

public students(String name, Integer number) {

super();

this.name = name;

this.number = number;

}

中的super();这句删除,

students p1 = (students)o1;

students p2 = (students)o2;

修改成:

students p1 = (students)o1("lili",25);

students p2 = (students)o2("wuwu",27);

看一看有没有问题?

最佳答案由网友  小文文化  提供
公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
15

分享到:

其他回答

其它网友回答:
没给Students对象赋值,

其它网友回答:
Students   student = new Students(   XXX   ,   XXX   );

    推荐