从类中调用方法错误

时间:2015-12-13 08:48:51

标签: java class methods instance

我是Java的初学者,很抱歉这些混乱局面。

我正在创建一个Library程序,有4个类:Library,Book,BookInterface和Patron。

我在程序的最后几个阶段但是我在Library类中有错误消息,因为我遇到了实例问题。

我收到错误消息"无法对非静态方法进行静态引用"在我的所有switch语句中。我试图在案例1中创建一个Library类的实例,但仍然是一条错误消息。此外,我无法将这些方法更改为静态。任何帮助深表感谢! :)

图书馆班:

import java.awt.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner; 
import java.util.Collections; 
public class Library 
{

public static void main(String[] args)
{
    //create new library 
    Library newLibrary = new Library();     
}

public Library()
{
    Library library = new Library(); 
    Scanner input = new Scanner(System.in);
    int choice = 0;
    System.out.println("********************Welcome to the Public Library!********************");
    System.out.println("              Please Select From The Following Options:               ");
    System.out.println("**********************************************************************");

    while(choice != 9)
    {
        System.out.println("1: Add new patron");
        System.out.println("2: Add new book");
        System.out.println("3: Edit patron");
        System.out.println("4: Edit book");
        System.out.println("5: Display all patrons");
        System.out.println("6: Display all books");
        System.out.println("7: Check out book");
        System.out.println("8: Check in book");
        System.out.println("9: Search book");
        System.out.println("10: Search Patron");
        System.out.println("11: Exit");
        choice = input.nextInt();


    switch(choice)
    {
    case 1: //Add new patron
            //ERROR: Patron cannot be resolved or is not a field
            library.Patron.newPatron(); 
            break; 

    case 2: //Add new book
            //ERROR: Cannot make a static reference to the non-static method
            Book.addBook(); 
            break; 

    case 3: //Edit patron name
            Patron.editName(); 
            break; 

    case 4: //edit book
            //ERROR: Cannot make a static reference to the non-static method
            Book.editBook(); 
            break;  

    case 5: //display all patrons   
            System.out.println(Book.UserList); 
            break; 

    case 6: //display all books 
            //System.out.println(Book.OrigBookList); 
            Book.libraryInventory();
            //Book.bookStatus()
            break; 

    case 7: //check out a book
            //ERROR: Cannot make a static reference to the non-static method
            Patron.CheckOutBook(); 
            break; 

    case 8: //check in a book
            //ERROR: Cannot make a static reference to the non-static method
            Patron.CheckInBook(); 
            break; 

    case 9: //search book
            //ERROR: Cannot make a static reference to the non-static method
            Patron.bookStatus(); 
            break; 

    case 10://search Patron
            Patron.searchPatron();
            break; 
    case 11: //exit program


        }
    }
}   

}

图书课程:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Book implements BookInterface
{
Scanner input = new Scanner(System.in);

static ArrayList <String> UserList = new ArrayList<String>(); 
static ArrayList <String> BookList = new ArrayList <String> (); //display just titles// use when checking out books
static ArrayList <String> OrigBookList = new ArrayList <String> (); //keep track of all titles ever entered


public String title; 
public String author;
public String book;
public boolean checkIn;

private String status;
private String borrower; 

public Book(String t, String a)
{
    title = t; 
    author = a; 
}

//constructor create new book
public Book(String newTitle)
{
    title = newTitle;   
}


public String toString()
{
    return title + " " + author; 
}

public String getTitle() 
{
    return title;
}

public void setTitle(String title) 
{
    this.title = title;
}

public String getAuthor() 
{
    return author;
}

public void setAuthor(String author) 
{
    this.author = author;
}

public void addBook()
{
    Scanner input = new Scanner(System.in);
    Scanner inputread = new Scanner(System.in);
    System.out.print("Enter book title: ");

    String title1 = inputread.nextLine();

    Scanner input1 = new Scanner(System.in);
    System.out.print("Enter book author: ");
    String author1 = inputread.next(); 

    Book fullBook = new Book(title1, author1);  //create constructor w/ title & author
    Book book1 = new Book(title1);              //constructor w/ just title to be used to display all books
    //BookList.add(title1);
    OrigBookList.add(title1);
    setStatus("IN");    //false = checked in 
    System.out.println("-----------------------------------------------");
    System.out.println("-----" + title1 + " is now in the library!-----");
    System.out.println("-----------------------------------------------");
}

public void editBook()
{
    Scanner inputread = new Scanner(System.in);
    System.out.println("Enter original book title: ");
    String origTitle = inputread.nextLine(); 
    System.out.println("Enter edited book title: ");
    String editedTitle = inputread.nextLine();
    Collections.replaceAll(Book.UserList, origTitle, editedTitle);
    System.out.println("------------------------------------------------------");
    System.out.println(origTitle + " has been changed to " + editedTitle + "!");
    System.out.println("------------------------------------------------------");

}

public String getStatus(String book)
{
    return status; 
}

public void setStatus(String status)    
{
    this.status = status; 
}

public void setBorrower(String borrower)
{
    this.borrower = borrower; 
}

public String getBorrower(String checkPatron)
{
    return borrower; 
}

public String getBook(String checkPatron)
{
    return book; 
}

public void setBook(String bookCheckOut)
{
    this.book = bookCheckOut;  
}

public void libraryInventory()
{
    System.out.println("------------------ Library Inventory: ---------------");
    for(int i =0; i<= OrigBookList.size()-1; i++)
    {
        //Book Title: checked in/out
        System.out.println(OrigBookList.get(i) + ":" + getStatus(OrigBookList.get(i)));         
    }
    System.out.println("-----------------------------------------------------");
}

}

赞助人类:

import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class Patron 
{

Scanner input = new Scanner(System.in);
private String fullName;
int bookCount = 0;  //amount books user has in pocket
int books = 0;


//constructor to "add new patron" by entering their name. 
public Patron(String newName)
{
    fullName = newName; 
}

public String toString()
{
    return fullName;
}

public String getName() 
{
    return fullName; 
}

public void CheckOutBook()
{
    //create and format due date (7days)
    GregorianCalendar returnDate = new GregorianCalendar(); 
    returnDate.add(GregorianCalendar.DATE, 7);
    Date d = returnDate.getTime();
    DateFormat df = DateFormat.getDateInstance();
    String dueDate = df.format(d);

    Scanner inputread = new Scanner(System.in);
    Scanner input = new Scanner(System.in);
    System.out.println("Enter full patron name: ");
    String borrower = inputread.nextLine(); 
    System.out.println("Enter book title to check out: ");
    String bookCheckOut = inputread.nextLine(); 
    Book checkOut = new Book(bookCheckOut);

    if(Book.BookList.contains(bookCheckOut)) 
    {
        Book.BookList.remove(bookCheckOut);
        checkOut.setStatus("OUT");     
        checkOut.setBorrower(borrower);
        Book.BookList.remove(bookCheckOut);

        System.out.println("----------" + bookCheckOut + " has been checked out!----------");
        System.out.println("-------------------BOOK STATUS:---------------------");
        System.out.println("Book Title: " + bookCheckOut);
        System.out.println("Book Status: Checked out");
        System.out.println("Borrower: " + borrower); 
        System.out.println("Due Date: " + dueDate);
        System.out.println("----------------------------------------------------");
    }

    else if (!(Book.UserList.contains(borrower)))
    {
        System.out.println("Patron is not a part of library system. Please enter patron in system.");
    }
    else if (!(Book.BookList.contains(bookCheckOut)))
    {
        System.out.println(bookCheckOut + " is not in the library. Please enter "
        + "a different book to be checked out");
    } 


}

public void CheckInBook()
{
    Scanner inputread = new Scanner(System.in);
    System.out.println("Enter book title to be checked in: ");
    String bookCheckIn = inputread.nextLine(); 
    Book checkOut = new Book(bookCheckIn);

    if((!Book.BookList.contains(bookCheckIn)) && Book.OrigBookList.contains(bookCheckIn))
    {
        Book.BookList.add(bookCheckIn);
        checkOut.setStatus("IN"); 
        System.out.println("------------------------------------------------------");
        System.out.println("-----" + bookCheckIn + " has been checked in!-----");
        System.out.println("------------------------------------------------------");

    }
    else 
        System.out.println(bookCheckIn + " is not part of the library system. Please enter "
        + "a different book to be checked in");
}

public boolean canBorrow()
{
    if(bookCount <= 3)
    {
        return true; 
    } 
    else 
    {
        return false; 
    }
}

public static void editName()
{
    Scanner inputread = new Scanner(System.in);
    System.out.println("Enter original patron full name: ");
    String origName = inputread.nextLine(); 
    System.out.println("Enter edited patron full name: ");
    String editedName = inputread.nextLine();
    Collections.replaceAll(Book.UserList, origName, editedName);
    System.out.println("------------------------------------------------------");
    System.out.println(origName + " has been changed to " + editedName + "!");
    System.out.println("------------------------------------------------------");       
}

public void newPatron()
{
    Scanner inputread = new Scanner(System.in);
    System.out.println("Enter patron full name: ");
    String name = inputread.nextLine();
    Book.UserList.add(name);        //add name to userList
    Patron patron1 = new Patron(name);


    System.out.println("-----------------------------------------------------------------");
    System.out.println("-----" + name + " has been added to the library system" + "-----");
    System.out.println("-----------------------------------------------------------------");


}

public void bookStatus()        //STOPS 
{
    Scanner input = new Scanner(System.in);
    Scanner inputread = new Scanner(System.in);
    System.out.println("Enter book title: ");
    String checkStatus = inputread.nextLine(); 
    Book status = new Book(checkStatus);

    if(Book.OrigBookList.contains(checkStatus) && status.getStatus(checkStatus) == "OUT")
    {
        System.out.println("Status: checked out");  
        System.out.println("Borrower: " + status.getBorrower(checkStatus));
    }
    else if(Book.OrigBookList.contains(checkStatus) && status.getStatus(checkStatus) == "IN")       
    {
        System.out.println("Status: checked in");
        System.out.println("Borrower: none");
    }
    else if(!(Book.OrigBookList.contains(checkStatus)))
        System.out.print("Book is not in library system. Please add the book first.");

}

public void searchPatron()      //WORKS!!! 
{
    Scanner inputread = new Scanner(System.in);
    System.out.println("Enter patron full name: ");
    String checkPatron = inputread.nextLine();
    Book search = new Book(checkPatron);

    if(Book.UserList.contains(checkPatron))
    {
        System.out.println("-------------------------------------------------");
        System.out.println("Books checked out: " + search.getBook(checkPatron)); 
        System.out.println("-------------------------------------------------");

    }
    else 
        System.out.println("Patron is not part of the library system. Please create new patron first.");
}

}

1 个答案:

答案 0 :(得分:1)

由于您正在调用Patron和Book的非静态方法,因此您必须使其对象调用这些方法。只能在类上直接调用静态方法。有关静态成员的详细信息,请查看下面的链接

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

要牢记的事情

  1. 构造函数应该用于创建对象,只有你的Library()构造函数做了太多的工作,试着把它放在构造函数之外。
  2. 你的案例11没有退出循环,我在那里添加了System.exit(0)。
  3. 使用input.close()
  4. 关闭Scanner对象
  5. 在代码中尝试一些异常处理是安全的。
  6. 在Java中,通常在命名非静态字段和方法时保留第一个字母。请查看此链接https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
  7. 这是更正后的代码

    import java.awt.List;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Scanner;
    import java.util.Collections;
    
    public class Library {
    
        public static void main(String[] args) {
            // create new library
            Library newLibrary = new Library();
        }
    
        public Library() {
            Scanner input = new Scanner(System.in);
            int choice = 0;
            System.out
                    .println("********************Welcome to the Public Library!********************");
            System.out
                    .println("              Please Select From The Following Options:               ");
            System.out
                    .println("**********************************************************************");
    
            while (choice != 9) {
                System.out.println("1: Add new patron");
                System.out.println("2: Add new book");
                System.out.println("3: Edit patron");
                System.out.println("4: Edit book");
                System.out.println("5: Display all patrons");
                System.out.println("6: Display all books");
                System.out.println("7: Check out book");
                System.out.println("8: Check in book");
                System.out.println("9: Search book");
                System.out.println("10: Search Patron");
                System.out.println("11: Exit");
                choice = input.nextInt();
    
                //creating Patron and Book objects
                Patron patron = new Patron();
                Book book = new Book();
                switch (choice) {
                case 1: // Add new patron
                        // ERROR: Patron cannot be resolved or is not a field
                    patron.newPatron();
                    break;
    
                case 2: // Add new book
                        // ERROR: Cannot make a static reference to the non-static
                        // method
                    book.addBook();
                    break;
    
                case 3: // Edit patron name
                    patron.editName();
                    break;
    
                case 4: // edit book
                        // ERROR: Cannot make a static reference to the non-static
                        // method
                    book.editBook();
                    break;
    
                case 5: // display all patrons
                    System.out.println(Book.UserList);
                    break;
    
                case 6: // display all books
                        // System.out.println(Book.OrigBookList);
                    Book.libraryInventory();
                    // Book.bookStatus()
                    break;
    
                case 7: // check out a book
                        // ERROR: Cannot make a static reference to the non-static
                        // method
                    patron.CheckOutBook();
                    break;
    
                case 8: // check in a book
                        // ERROR: Cannot make a static reference to the non-static
                        // method
                    patron.CheckInBook();
                    break;
    
                case 9: // search book
                        // ERROR: Cannot make a static reference to the non-static
                        // method
                    patron.bookStatus();
                    break;
    
                case 10:// search Patron
                    patron.searchPatron();
                    break;
                case 11: // exit program
                    //added exit(0)
                    System.exit(0);
                }
            }
        }
    }