NullPointerException的问题

Yori Fang 2011-12-16 07:13:45

//下面是Book类
public class Book implements Comparable{
private String bookname;
private String author;
private String press;
private String date;
private int price;

public Book (){

}
public Book (String bookname,String author,String press,String date,int price) {
this.bookname = bookname;
this.author = author;
this.press = press;
this.date = date;
this.price = price;
}

public void setBookname (String bookname) {
this.bookname = bookname;
}
public void setAuthor (String author) {
this.author = author;
}
public void setPress (String press) {
this.press = press;
}
public void setDate(String date) {
this.date = date;
}
public void setPrice(int price) {
this.price = price;
}

public String getBookname() {
return bookname;
}
public String getAuthor() {
return author;
}
public String getpress() {
return press;
}
public int getPrice() {
return price;
}
public String toString(){
return bookname+" "+author+" "+press+" "+date+" "+price;
}
public int compareTo(Object o){
Book b = (Book)o;
if((this.bookname.compareTo(b.bookname))>0){
return 1;
}
else if((this.bookname.compareTo(b.bookname))==0){
return 0;
}
else return -1;
}

public static void main(String[] args){
Book myBook= new Book("ff","yy","love you","haha",712);
System.out.println(myBook);
}
}


//下面是SchoolBag类
import java.util.*;

public class SchoolBag {
private TreeSet<Book> booklist = new TreeSet<Book>();

public SchoolBag() {

}
public SchoolBag (Book book) {
booklist.add(book);
}
public ArrayList<Integer> getAllPrice(){
ArrayList<Integer> bookprices = new ArrayList<Integer> ();
for(Book element: booklist) {
bookprices.add(element.getPrice());
}
return bookprices;
}

public boolean add(Book book) {

return booklist.add(book);
}

public <E extends TreeSet<Book>> void setBooklist(E treeBook){
this.booklist = treeBook;
} //泛型方法,将泛型放在函数放回类型之前
public TreeSet<Book> getBooklist(){
return booklist;
}
public boolean remove(Book book) {
if(booklist.isEmpty()) {
System.out.println("Warning ,SchoolBag is Empty!");
return false;
}
else{
booklist.remove(book);
return true;
}
}
public static void main(String[] args){
Book mybook = new Book("xx","ff","geg","fege",12);
Book herbook = new Book("ss","ll","hh","rr",712);
//测试构造方法
SchoolBag sb = new SchoolBag(mybook);
//测试add
sb.add(herbook);
System.out.println(sb.booklist);
TreeSet<Book> bl = sb.getBooklist();
System.out.println(bl);
//测试remove
sb.remove(mybook);
System.out.println(bl);
//测试setBooklist
Book hisbook = new Book("hh","ss","nn","gg",464);
Book itsbook = new Book("ff","hh","KK","tt",375);
TreeSet<Book> b2 = new TreeSet<Book>();
b2.add(hisbook);
b2.add(itsbook);
sb.setBooklist(b2);
System.out.println("-----------------------");
System.out.println(sb.booklist);
//测试printAllPrice
ArrayList al = sb.getAllPrice();
System.out.println(al);

}

}


import java.util.*;
import java.io.*;

public class BookManager {
private SchoolBag schoolBag = new SchoolBag();

public BookManager(){

}
public BookManager(SchoolBag s){

}

public void readData() {

try {
File data = new File("BookList.txt");
FileReader fr = new FileReader(data);
BufferedReader br = new BufferedReader(fr);

String[] content = new String[5];
/*
int rowNum = 0;
String str;
while((str = br.readLine())!=null){
rowNum++;
}
Book[] bookFromData = new Book[rowNum];
int numBook=0;
String s1;
while((s1 = br.readLine())!=null){
System.out.println(s1);
content = s1.trim().split(",|,");
bookFromData[numBook].setBookname(content[0].trim());
bookFromData[numBook].setAuthor(content[1].trim());
bookFromData[numBook].setPress(content[2].trim());
bookFromData[numBook].setDate(content[3].trim());
bookFromData[numBook].setPrice(Integer.parseInt(content[4].trim()));
schoolBag.add(bookFromData[numBook]);
System.out.println(bookFromData[numBook]);
numBook++;
}
*/

Book[] book = new Book[7];
for(int i=0;i<7;i++){
book[i] = new Book();
}

int i=0;
String str;
while((str = br.readLine())!=null){
content = str.trim().split(",|,");
//测试Str
System.out.println(str);
book[i++].setBookname(content[0].trim());
book[i++].setAuthor(content[1].trim());
book[i++].setPress(content[2].trim());
book[i++].setDate(content[3].trim());
book[i++].setPrice(Integer.parseInt(content[4].trim()));
schoolBag.add(book[i++]);

}
br.close();
}catch(IOException e) {
e.printStackTrace();
}
}

public void print() {
System.out.println("-------------------------------------------------------");
System.out.println("书名 作者 出版号 出版日期 价格 ");
System.out.println("-------------------------------------------------------");
TreeSet<Book> treeBook = schoolBag.getBooklist();
for(Book book:treeBook){
System.out.println(book.toString());
}

}

public static void main(String[] args) {
BookManager bm = new BookManager();
bm.readData();
bm.print();

}
}

...全文
67 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
daizhe 2011-12-16
  • 打赏
  • 举报
回复
Book.java的55行compareTo()方法出的错,加个断点调试一下,看看this.bookname、b、b.bookname这几谁是null,就知道哪里错了
脉动 2011-12-16
  • 打赏
  • 举报
回复

import java.util.*;
import java.io.*;

public class BookManager {
private SchoolBag schoolBag = new SchoolBag();

public BookManager(){

}
public BookManager(SchoolBag s){

}

public void readData() {

try {
File data = new File("BookList.txt");
FileReader fr = new FileReader(data);
BufferedReader br = new BufferedReader(fr);

String[] content = new String[5];
/*
int rowNum = 0;
String str;
while((str = br.readLine())!=null){
rowNum++;
}
Book[] bookFromData = new Book[rowNum];
int numBook=0;
String s1;
while((s1 = br.readLine())!=null){
System.out.println(s1);
content = s1.trim().split(",|,");
bookFromData[numBook].setBookname(content[0].trim());
bookFromData[numBook].setAuthor(content[1].trim());
bookFromData[numBook].setPress(content[2].trim());
bookFromData[numBook].setDate(content[3].trim());
bookFromData[numBook].setPrice(Integer.parseInt(content[4].trim()));
schoolBag.add(bookFromData[numBook]);
System.out.println(bookFromData[numBook]);
numBook++;
}
*/

Book[] book = new Book[7];
for(int i=0;i<7;i++){
book[i] = new Book();
}

int i=0;
String str;
while((str = br.readLine())!=null){
content = str.trim().split(",|,");
//测试Str
System.out.println(str);
book[i].setBookname(content[0].trim());
book[i].setAuthor(content[1].trim());
book[i].setPress(content[2].trim());
book[i].setDate(content[3].trim());
book[i].setPrice(Integer.parseInt(content[4].trim()));
schoolBag.add(book[i]);
i++; //添加该语句,并将上面几句的i++改为i后,测试运行正常;不过代码未改之前,测试是ArrayIndexOutOfBoundsException异常
}
br.close();
}catch(IOException e) {
e.printStackTrace();
}
}

public void print() {
System.out.println("-------------------------------------------------------");
System.out.println("书名 作者 出版号 出版日期 价格 ");
System.out.println("-------------------------------------------------------");
TreeSet<Book> treeBook = schoolBag.getBooklist();
for(Book book:treeBook){
System.out.println(book.toString());
}

}

public static void main(String[] args) {
BookManager bm = new BookManager();
bm.readData();
bm.print();

}
}

Yori Fang 2011-12-16
  • 打赏
  • 举报
回复
运行的时候总是抛出:NullPointer异常
Java 2大全,Herbert Schildt,电子工业出版社, 2003/01, 86
Exception in thread "main" java.lang.NullPointerException
at Book.compareTo(Book.java:55)
at java.util.TreeMap.compare(TreeMap.java:1188)
at java.util.TreeMap.put(TreeMap.java:531)
at java.util.TreeSet.add(TreeSet.java:255)
at SchoolBag.add(SchoolBag.java:22)
at BookManager.readData(BookManager.java:61)
at BookManager.main(BookManager.java:83)
Yori Fang 2011-12-16
  • 打赏
  • 举报
回复
下面是BookList.txt的内容
Java 2大全,Herbert Schildt,电子工业出版社, 2003/01, 86
面向对象软件工程,Stephen R.Schach,机械工业出版社,2002/08,56
软件工程,Roger S. Pressman,清华大学出版社,2001/01,42
Design Patterns,Erich Gamma,机械工业出版社,2002/09,98
软件工程,张海藩,人民邮电出版社,2002/07,37
现代软件工程,孙涌,北京希望电子出版社,2002/08,42
面向对象技术UML教程,王少锋,清华大学出版社,2004/02,54

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧