我是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.");
}
}
答案 0 :(得分:1)
由于您正在调用Patron和Book的非静态方法,因此您必须使其对象调用这些方法。只能在类上直接调用静态方法。有关静态成员的详细信息,请查看下面的链接
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.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);
}
}
}
}