Book、Tape、およびCDクラスを使用してオブジェクトを作成するBookStoreApplicationを記述します。アプリケーションクラスは未完成ですが、Book、Tape、CDである新しいBookStoreItemを作成する必要があります。それらはBookStoreItemsクラスから継承します。このアプリケーションクラスでは、エラーが発生し続けます。
error: non-static method printMenu() cannot be referenced from a static context
error: non-static method getUserChoice() cannot be referenced from a static context
error: non-static variable input cannot be referenced from a static context
静的に変更してから静的に変更しませんでしたが、引き続きこのエラーが発生します...
import Java.util.Scanner;
public class BookStoreApp2 {
//constants for options
static final int ADD_BOOK = 0;
static final int ADD_TAPE = 1;
static final int ADD_CD = 2;
static final int QUIT = -1;
Scanner input = new Scanner (System.in);
public static void main(String[] args) {
BookStoreItem[] item;//declaring array
item = new BookStoreItem[10];//initializing array
int itemType = -1;
printMenu();
getUserChoice();
for (int i = 0; i < item.length; i++){
System.out.print("\n" + i + "\tEnter 0 for Book, 1 for Tape, 2 for CD: ");
itemType = input.nextInt();
switch (itemType) {
case 0:
item[i] = new Book();
break;
case 1:
item[i] = new Tape();
break;
case 2:
item[i] = new CD();
break;
default:
System.out.println("\nInvalid choice.");
}//end of switch statement
}//end of for loop
for (int i = 0; i < item.length; i++) {
System.out.println("\nAnimal #" + i + ": ");
System.out.println("\n\tTitle: " + item[i].getTitle()); //polymorphic because they can operate on separate objects
System.out.println("\n\tAuthor: " + item[i].getAuthor());
}//end of for
}//end of main method
//PRINT MENU----------------------------------------------------------
public void printMenu(){
System.out.println("\nPress:");
System.out.println("\t" + ADD_BOOK + "\tTo add a book to the book store.\n");
System.out.println("\t" + ADD_TAPE + "\tTo add a tape to the book store.\n");
System.out.println("\t" + ADD_CD + "\tTo add a CD to the book store.\n");
System.out.println("\t" + QUIT + "\tTo exit\n");
}
//---------------------------------------------------------------------
//GET USER CHOICE------------------------------------------------------
public int getUserChoice() {
int choice;
System.out.print("Please enter your choice: ");
choice = input.nextInt();
return choice;
}//end of getUserChoice
//----------------------------------------------------------------------
}//end class
printMenu()
とgetUserChoice()
static
の両方のメソッドを作成する必要があります。これは、_static main
_メソッドからインスタンスを作成せずに直接呼び出すためです。クラス、それらのメソッドが定義されています。また、それらが定義されているクラスのインスタンスへの参照がないと、_non-static
_メソッドを呼び出すことはできません。
または、メソッド呼び出し部分を次のように変更できます。
_BookStoreApp2 bookStoreApp = new BookStoreApp2();
bookStoreApp.printMenu();
bookStoreApp.getUserChoice();
_
単にプログラムを機能させるためだけに、main()メソッドの内容を取り、コンストラクターに入れます。
public BookStoreApp2()
{
// Put contents of main method here
}
次に、main()メソッドで。これを行う:
public void main( String[] args )
{
new BookStoreApp2();
}
あなたはどちらか
1)printMenu()
、getUserchoice()
を宣言し、static
として入力します
OR
2)より適切に設計したい場合は、ロジックをmain
から別のインスタンスメソッドに移動します。次に、main
からクラスの新しいインスタンスを作成し、インスタンスメソッドを呼び出します。
外部で入力オブジェクトを作成するのではなく、Scanner input = new Scanner (System.in);
をmainメソッドに配置する必要があります。