2013-11-15 2 views
1

안녕하십니까. 저는 3 권의 제목/저자를 3 권으로 지정하는 클래스 용 프로그램을 만들고 있습니다. 나는 책 수업, 시험 수업, 후원 수업을 가지고 있습니다. 지금까지 후원자는 시험기에서 그 이름을 모으고 그것을 돌려주고 있습니다. 문제는 수호 클래스, borrowBook ​​메소드에 있습니다. 테스터는 제목과 이름을 초기화하고 후원자를 만든 다음 borrowBook ​​메서드의 부울 결과를 인쇄하려고 시도합니다. 나는 borrowBook ​​메서드가 제목을 설정하려고 할 때 nullpointerexception을 계속 받지만 테스터의 후원자 인 borrowBook에 제목과 저자를 보냅니다. borrowBook의 다른 모든 작성자 & 제목과 동일한 것으로 가정합니다. 어떤 조언을 많이 주시면 감사하겠습니다!NullPointerException을 찾을 수 없습니다.

테스터 등급 :

public class ProjectFiveSix { 

public static void main(String[] args) { 


    String title = "On the Origin of Species"; 
    String name = "Hugo"; 
    String author = "Charles Darwin"; 

    Patron patronOne = new Patron(); 

    System.out.print("The Patron's Name is: " + patronOne.getName(name)); 
    System.out.print("Test " + patronOne.borrowBook(author, title)); 

수호 등급 :

public class Patron { 

private String name; 
private Book book1; 
private Book book2; 
private Book book3; 

public Patron(){ 
    name = ""; 
    book1 = null; 
    book2 = null; 
    book3 = null; 
} 
public String getName(String name){ 
    return name; 
} 
public boolean borrowBook(String title, String author){  
    if (book1 == null){ 
     book1.getTitle(title); 
     book1.getAuthor(author); 
     return true;  

    }else if (book2 == null){ 
     book2.getTitle(title); 
     book2.getAuthor(author); 
     return true; 

    }else if (book3 == null){ 
     book3.getTitle(title); 
     book3.getAuthor(author); 
     return true; 

    }else{ 
     return false; 
    } 
    }  




public String toString(String str){ 
    str = name + "\n" + book1; 
    return str; 
} 

} 

예약 클래스 :

public class Book { 

private String title; 
private String author; 

public Book(){ 
    title = ""; 
    author = ""; 
} 

public String getTitle(String title){ 
    title = title; 
    return title; 
} 
public String getAuthor(String author){ 
    author = author; 
    return author; 
} 

} 

, 내가 대신 = null로 borrowBook의 책을 설정하는 시도로 많은 제안! , 그리고 그것은 어느 정도까지 작동했습니다. 각 도서는 공개 Patron() {}에서 null로 설정되어 있으므로 메서드가 false가됩니다. 말이된다! 그러나 아이디어는 각 책이 null에서 시작하고 borrowBook이 실행될 때 제목과 저자의 현재 값을 찾은 첫 번째 null 책에 할당합니다. 나는 그것을 설정할 수 있다고 가정합니다. 그래서 borrowBook이 false를 반환한다면 Book1에 값을 할당하십시오. 그 다음에는 매번 다음에 true를 반환 할 것이므로이 메소드를 책 2와 3에 사용할 수 있다고 믿지는 않습니다. 그래도 커뮤니티에 큰 감사를드립니다, 여러분들은 큰 도움이됩니다!

답변 - -이 책을 사용하면 중복성이 줄어들고 값을 수정할 수 있습니다. 새로운 책을 만드는 것이 모든 도움을 주셔서 감사합니다.

+0

당신이 예외 스택 추적 – snegi

+0

과거 복사 할 수 민간 분야에 책 클래스 생성자 공급 값을 수 있도록하는 것이 좋습니다 에서 필드 값을 얻으려고 노력하는 당신의'getTitle' 및 'getAuthor' 메소드는 의미가 없습니다. 실제로 전달한 값을 반환하는 것입니다. – MadProgrammer

+0

실제로 스택 추적에서 *보십시오. 문제가 어디 있는지 정확히 알려주므로 수정 사항을 분명히해야합니다. – EJP

답변

0

이 방법이

public Book(String title, String author){ 
    this.title = title; 
    this.author = author; 
} 

Book 생성자를 변경, 당신은) (새로운 예약을하고 어디 해달라고 Book

public boolean borrowBook(String title, String author){  
    if (book1 == null){ 
     book1 = new Book(title, author); 
     book1.getTitle(title); // I don't know what you need these for? 
     book1.getAuthor(author); // ??? 
     return true;  

    }else if (book2 == null){ 
     book2 = new Book(title, author); 
     book2.getTitle(title); 
     book2.getAuthor(author); 
     return true; 

    }else if (book3 == null){ 
     book3 = new Book(title, author); 
     book3.getTitle(title); 
     book3.getAuthor(author); 
     return true; 

    }else{ 
     return false; 
    } 
} 
1

bookN == null을 확인하지만 null 개체에서 bookN.get[Title/Author]으로 전화 할 수 없는지 확인하십시오.

귀하의 사용이 올바르게 이해되면 bookN != null인지 확인하는 것이 좋습니다.

내가 당신의 상황이 역전되어 당신의 borrowBook 방법으로 생각
0

, 당신은 : 다음 bookX.<anything>가 발생합니다 bookX가 null, 그렇지 않은 경우,

public boolean borrowBook(String title, String author){  
    if (book1 == null){ 
     book1.getTitle(title); 
     book1.getAuthor(author); 
     return true;  

    }else if (book2 == null){ 
     book2.getTitle(title); 
     book2.getAuthor(author); 
     return true; 

    }else if (book3 == null){ 
     book3.getTitle(title); 
     book3.getAuthor(author); 
     return true; 

    }else{ 
     return false; 
    } 
    } 

그리고 난 당신이 대신 ==!=을해야하는 각 책 htink NPE

0

book1이 null이고 NullPointerException이 발생하는 것 같습니다. book1.getTitle(title);

0

볼 작성해야합니다.

또한 코드를 리팩터링 할 것을 제안합니다. 이자형.g 나는 Person 클래스의 생성자에 매개 변수로이

public class Book { 
    private final String title; 
    private final String author; 

    public Book(String title, String author) { 
    this.title = title; 
    this.author = author; 
    } 

    public String getTitle() { return title; } 
    public String getAuthor() { return author; } 

} 

같은 방법으로 패스 "이름"와 같은 예약 클래스를 리팩토링 것입니다.

1

당신은 널 객체가

public Book(String title,String author){ 
    this.title = title; 
    this.author = author; 
} 
관련 문제