最近要做一个作业,老师给了一个excel表。里面有全班的兴趣统计数据。要求读取里面的数据并进行操作。我本来是想用apache poi来读取,结果却发发生了java.lang.NullPointerException 错误。刚刚学java,很多东西不懂。求指教哪里错了,应该如何改正。真心求教。
PS:源代码分三个类,main函数在JiangClass(班级),还有Student(学生)和Interest(兴趣)。
import java.text.NumberFormat;
import java.io.FileInputStream;
import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class JiangClass {
private Student[] students;
private String[] interestsNames;
public JiangClass(int studentCount, String[] interestsNames) {
this.students = new Student[studentCount];
this.interestsNames = interestsNames;
}
public Student[] getStudents() {
return students;
}
public void setStudents(Student[] students) {
this.students = students;
}
public String[] getInterestsNames() {
return interestsNames;
}
public void setInterestsNames(String[] interestsNames) {
this.interestsNames = interestsNames;
}
public void loadDataByPoi(String filePath){
try {
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(filePath));
HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row = null;
HSSFCell cell = null;
String cellval;
for (int i = sheet.getFirstRowNum()+1; i < sheet.getPhysicalNumberOfRows(); i++) {
row = sheet.getRow(i);
this.students[i-1].setName(row.getCell(0).toString());
this.students[i-1].setName(row.getCell(1).toString());
for (int j = row.getFirstCellNum()+2; j < row.getPhysicalNumberOfCells(); j++) {
cell = row.getCell(j);
cellval = cell.toString();
int t=Integer.parseInt(cellval);
this.students[i-1].interests[j-2].setValue(t);
}
}
} catch (IOException ex) {
ex.printStackTrace();
} }
public Student getBestFriend(String studentName) {
NumberFormat num = NumberFormat.getPercentInstance();
num.setMaximumIntegerDigits(3);
num.setMaximumFractionDigits(2);
Student student = this.getStudentByName(studentName);
System.out.println(studentName+"和全班同学匹配度的排序");
//选择排序
for(int i=0;i<students.length-1;i++){
for(int j=i+1;j<students.length;j++){
if (students[i].getName().equals(studentName)){
continue;
}
if(students[i].getMatchValue(student)>students[j].getMatchValue(student)){
Student t=students[i];
students[i]=students[j];
students[j]=t;
}
}
}
for(int i=0;i<students.length;i++){
if (students[i].getName().equals(studentName)){
continue;
}
System.out.println(students[i].getName()+":"+num.format(students[i].getMatchValue(student)));
}
return students[students.length-1];
}
public Student getStudentByName(String studentName) {
for (int i = 0; i < getStudents().length; i++) {
Student student = getStudents()[i]; if (student.getName().equals(studentName)) {
return student;
}
}
return null;
}
public static void main(String[] args){
String[] interesNames = { "文学", "电影", "爱情" ,"动漫","美食","JAVA","微博","运动","音乐","网络游戏"};
JiangClass cls = new JiangClass(42,interesNames);
cls.loadDataByPoi("d:\\信管学生兴趣统计表.xls");
Student friend = cls.getBestFriend("许健彰");
System.out.println("最匹配的人是: "+friend.getName());
}
}public class Interest {
private String item;
private int value;
Student student;
public Interest(String item, int value, Student student) {
this.item = item;
this.value = value;
this.student = student;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
public class Student {
private String name;
private String gender;
Interest[] interests;
private JiangClass cls;
public Student(String name, String gender,Interest[] interest) {
this.name = name;
this.gender = gender;
this.interests=interest;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Interest[] getInterests() {
return interests;
} public void setInterests(Interest[] interests) {
this.interests = interests;
}
public double getMatchValue(Student other){
double fenmu=(9-1)*this.cls.getInterestsNames().length;
int fenzi=0;
for(int i=0;i<this.cls.getInterestsNames().length;i++){
int v=this.getInterests()[i].getValue()-other.getInterests() [i].getValue();
v=Math.abs(v);
fenzi=fenzi+v;
}
return 1-fenzi/fenmu;
}
}
PS:源代码分三个类,main函数在JiangClass(班级),还有Student(学生)和Interest(兴趣)。
import java.text.NumberFormat;
import java.io.FileInputStream;
import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class JiangClass {
private Student[] students;
private String[] interestsNames;
public JiangClass(int studentCount, String[] interestsNames) {
this.students = new Student[studentCount];
this.interestsNames = interestsNames;
}
public Student[] getStudents() {
return students;
}
public void setStudents(Student[] students) {
this.students = students;
}
public String[] getInterestsNames() {
return interestsNames;
}
public void setInterestsNames(String[] interestsNames) {
this.interestsNames = interestsNames;
}
public void loadDataByPoi(String filePath){
try {
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(filePath));
HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row = null;
HSSFCell cell = null;
String cellval;
for (int i = sheet.getFirstRowNum()+1; i < sheet.getPhysicalNumberOfRows(); i++) {
row = sheet.getRow(i);
this.students[i-1].setName(row.getCell(0).toString());
this.students[i-1].setName(row.getCell(1).toString());
for (int j = row.getFirstCellNum()+2; j < row.getPhysicalNumberOfCells(); j++) {
cell = row.getCell(j);
cellval = cell.toString();
int t=Integer.parseInt(cellval);
this.students[i-1].interests[j-2].setValue(t);
}
}
} catch (IOException ex) {
ex.printStackTrace();
} }
public Student getBestFriend(String studentName) {
NumberFormat num = NumberFormat.getPercentInstance();
num.setMaximumIntegerDigits(3);
num.setMaximumFractionDigits(2);
Student student = this.getStudentByName(studentName);
System.out.println(studentName+"和全班同学匹配度的排序");
//选择排序
for(int i=0;i<students.length-1;i++){
for(int j=i+1;j<students.length;j++){
if (students[i].getName().equals(studentName)){
continue;
}
if(students[i].getMatchValue(student)>students[j].getMatchValue(student)){
Student t=students[i];
students[i]=students[j];
students[j]=t;
}
}
}
for(int i=0;i<students.length;i++){
if (students[i].getName().equals(studentName)){
continue;
}
System.out.println(students[i].getName()+":"+num.format(students[i].getMatchValue(student)));
}
return students[students.length-1];
}
public Student getStudentByName(String studentName) {
for (int i = 0; i < getStudents().length; i++) {
Student student = getStudents()[i]; if (student.getName().equals(studentName)) {
return student;
}
}
return null;
}
public static void main(String[] args){
String[] interesNames = { "文学", "电影", "爱情" ,"动漫","美食","JAVA","微博","运动","音乐","网络游戏"};
JiangClass cls = new JiangClass(42,interesNames);
cls.loadDataByPoi("d:\\信管学生兴趣统计表.xls");
Student friend = cls.getBestFriend("许健彰");
System.out.println("最匹配的人是: "+friend.getName());
}
}public class Interest {
private String item;
private int value;
Student student;
public Interest(String item, int value, Student student) {
this.item = item;
this.value = value;
this.student = student;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
public class Student {
private String name;
private String gender;
Interest[] interests;
private JiangClass cls;
public Student(String name, String gender,Interest[] interest) {
this.name = name;
this.gender = gender;
this.interests=interest;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Interest[] getInterests() {
return interests;
} public void setInterests(Interest[] interests) {
this.interests = interests;
}
public double getMatchValue(Student other){
double fenmu=(9-1)*this.cls.getInterestsNames().length;
int fenzi=0;
for(int i=0;i<this.cls.getInterestsNames().length;i++){
int v=this.getInterests()[i].getValue()-other.getInterests() [i].getValue();
v=Math.abs(v);
fenzi=fenzi+v;
}
return 1-fenzi/fenmu;
}
}
对象object,方法method();如果object为null,那么object.method()这么调用就会出。你可以检查你对应的代码行,确认下object是否是空!空指针异常还是比较容易定位和解决的!
this.students[i-1].setName(row.getCell(0).toString());这一行报错