En écrivant une BookStoreApplication qui utilise les classes Book, Tape et CD pour créer des objets. Bien qu'elle ne soit pas terminée, la classe d'application doit créer de nouveaux BookStoreItems, qui sont Book, Tape et CD. Ils héritent de la classe BookStoreItems. Dans cette classe d'application, je reçois toujours l'erreur:
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
Je l'ai changé pour être statique et puis pour ne pas être statique, pourtant je continue à obtenir cette erreur ...
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
Vous devez créer votre méthode - printMenu()
et getUserChoice()
static
, car vous les invoquez directement depuis votre static main
, sans créer une instance de la classe, ces méthodes sont définies dans. Et vous ne pouvez pas appeler un non-static
méthode sans référence à une instance de la classe dans laquelle ils sont définis.
Vous pouvez également modifier la partie d'appel de méthode en:
BookStoreApp2 bookStoreApp = new BookStoreApp2();
bookStoreApp.printMenu();
bookStoreApp.getUserChoice();
Simplement dans le but de faire fonctionner votre programme, prenez le contenu de votre méthode main () et mettez-le dans un constructeur:
public BookStoreApp2()
{
// Put contents of main method here
}
Ensuite, dans votre méthode main (). Faites ceci:
public void main( String[] args )
{
new BookStoreApp2();
}
Tu peux soit
1) Déclarez printMenu()
, getUserchoice()
et entrez static
OR
2) Si vous souhaitez mieux le concevoir, déplacez la logique de votre main
vers une méthode d'instance distincte. Et puis à partir de main
créez une nouvelle instance de votre classe et appelez vos méthodes d'instance
Vous devez placer Scanner input = new Scanner (System.in);
dans la méthode principale plutôt que de créer l'objet d'entrée à l'extérieur.