簡體   English   中英

從類中調用方法錯誤

[英]Calling methods from classes error

我是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.");
}

}

由於要調用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()關閉Scanner對象
  4. 為了安全起見,請嘗試一些代碼中的異常處理。
  5. 在Java中,約定在命名非靜態字段和方法時應盡量減少首字母。 檢查此鏈接https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html

這是更正的代碼

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);
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM