2013-11-13 2 views
0

Я делаю простую программу, которая задает название и имя объекта: book1. В конечном счете, цель состоит в том, чтобы иметь несколько книг под классом Patron, который будет использовать класс Book для назначения значений. Однако я затрудняюсь просто получить класс Patron, чтобы признать методы класса Book.Метод выполнения сложности из другого класса

Basic Tester/Основной метод:

import java.util.Scanner; 

public class ProjectFiveSix { 

    public static void main(String[] args) { 


     String title = "Bob"; 
     String name = "Hugo";  // name of patron (class assigning book) 
     String author = "Rodrigo"; 

    Patron patronOne = new Patron(); 
    patronOne.setName(name); 

Patron Класс:

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 setName(String name){ 
     return name; 
    } 
    public String borrowBook(String book1, String titleFinal, String authorFinal, String title, String author){ 
     if (book1 == null){ 
      book1.setTitle(titleFinal); //** 
      book1.setAuthor(authorFinal); //*** 
    } 
} 
} 

Книга Класс:

public class Book { 

    private String titleFinal; 
    private String authorFinal; 

    public Book(){ 
     titleFinal = ""; 
     authorFinal = ""; 
    } 

    public String setTitle(String title){ 
     titleFinal = title; 
     return titleFinal; 
    } 
    public String setAuthor(String author){ 
     authorFinal = author; 
     return authorFinal; 
    } 

} 

Здесь я получаю "Не удается найти символ" на обеих линиях book1.settitle и book1.setauthor. Книга была создана, и я не могу понять проблему.

Заранее благодарен!

+0

book1 должен быть объявлен как книга, а не строка. – BevynQ

+0

Спасибо, ребята! Наличие параметра - String book1 - имеет мало смысла, изменило его на - Book book1 - и я должен уйти. – Dozar

+0

Это может быть немного за пределами того места, где вы сейчас находитесь, но использование сеттеров - это запах кода. Вы должны предпочесть устанавливать поля в конструкторе. Подумайте об этом: хотите ли вы иметь возможность изменить название или автора книги в реальной жизни? Итак, 'public Book (String title, String author) { this.title = название; this.author = author; } ' Кроме того, вы должны использовать какой-то список (например, ArrayList) вместо hardcoding определенное количество переменных книги в классе покровителей – Floegipoky

ответ

1

Вы указали свой параметр book1 (a String) под тем же именем, что и ваша переменная экземпляра book1 (a Book). Для ссылки на переменную экземпляра, либо имя параметра другое имя переменной, или использовать this. указать переменную экземпляра:

this.book1.setTitle(titleFinal); //** 
this.book1.setAuthor(authorFinal); //*** 

В любом случае, вам нужно создать реальный Book экземпляр, либо переменная экземпляра book1 останется null, и вы получите NullPointerException.

Смежные вопросы