Pre Edit: проблема заключается в том, что я отмечаю ее как статическую, поэтому
public static int printMenuGetSelection()
это дает мне сообщение
This Static method cannot hide the instance method from AMenu
Я пишу программу Java, которая читает файлы и предоставляет пользователю несколько параметров для отображения информации о файле. В настоящее время я пишу интерфейс меню, который реализует реальный интерфейс и упрощает использование программы. Тем не менее, я получаю исключение, когда пытаюсь вызвать метод меню в моем основном методе. Ошибка находится в одной активной строке основного метода, где я вызываю printMenuGetSelection(), и это говорит
Невозможно сделать статическую ссылку на нестатический метод printMenuGetSelection() из типа SpecialAssignment1
Как исправить эту ошибку? вот моя программа:
import java.util.*;
import java.io.*;
import java.text.*;
public class SpecialAssignment1 implements AMenu {
public static void main(String[] args) throws FileNotFoundException{
printMenuGetSelection();
/*System.out.println(RewardCustomer("transactions1.dat")); //CURRENTLY DISPLAYING TOP 6, DOESN'T WORK WITH TIES OR TOPN < lines
ProcessTransactionsFile("transactions2.dat", 52);*/
}
public int printMenuGetSelection() throws FileNotFoundException{
boolean runProgram = true;
Scanner s = new Scanner(System.in);
printStartMenu();
String startMenuSelection = s.next();
while(runProgram){
if(startMenuSelection.equals("1")){
startMenu1();
} else if(startMenuSelection.equals("2")){
startMenu2();
} else if(startMenuSelection.equals("3")){
startMenu3();
} else if(startMenuSelection.equals("4")){
startMenu4();
} else if(startMenuSelection.equals("5")){
runProgram = false;
} else {
System.out.println("***Selection Invalid!***");
}
}
return 1;
}
public static void printStartMenu(){
System.out.println("**********************************************************");
System.out.println("Main Menu...");
System.out.println(" (1) RewardCustomers");
System.out.println(" (2) ProcessTransactionFiles");
System.out.println(" (3) TopCustomers");
System.out.println(" (4) QueryStatsFile");
System.out.println(" (5) Quit");
System.out.println(" Enter a valid selection: ");
}
public static void startMenu1() throws FileNotFoundException{
boolean runMenu1 = true;
while(runMenu1){
Scanner s = new Scanner(System.in);
System.out.println("Reward Customers Menu...");
System.out.println(" (1) Use transactions1.dat");
System.out.println(" (2) Use transactions2.dat");
System.out.println(" (3) Quit");
System.out.println(" Enter a valid selection: ");
String menu1Selection = s.next();
if(menu1Selection.equals("1")){
System.out.println(RewardCustomer("transactions1.dat"));
} else if(menu1Selection.equals("2")){
System.out.println(RewardCustomer("transactions2.dat"));
} else if(menu1Selection.equals("3")){
runMenu1 = false;
} else {
System.out.println("***Selection Invalid!***");
}
}
}
public static void startMenu2(){
boolean runMenu2 = true;
while(runMenu2){
Scanner s = new Scanner(System.in);
System.out.println("Process Transaction Files Menu...");
System.out.println(" (1) Create transactions2.dat file");
System.out.println(" (2) Display transactions1.dat");
System.out.println(" (3) Display transactions2.dat");
System.out.println(" (4) Query transactions1.dat");
System.out.println(" (5) Query transactions2.dat");
System.out.println(" (6) Quit");
System.out.println(" Enter a valid selection: 4");
String menu2Selection = s.next();
if(menu2Selection.equals("1")){
}
}
}
public static void startMenu3(){
}
public static void startMenu4(){
}
Я удалил код, не относящийся к вопросу, чтобы его было легче читать, если понадобится, я его вложу. Кроме того, здесь есть интерфейс AMenu. Пожалуйста, не предлагайте никаких других изменений в моей программе. Если вы считаете глупым иметь меню в качестве внедренного интерфейса, я согласен с вами на 100%, но это требование. Для справки, вот интерфейс AMenu:
import java.io.FileNotFoundException;
public interface AMenu {
/**
* Prints a menu with selections and logic to return a valid selection.
* @return the selected item
*/
abstract int printMenuGetSelection() throws FileNotFoundException;
/**
* @return the numberOfMenuItems
*/
abstract int getNumberOfMenuItems();
}
Поскольку printMenuGetSelection()
не статичен, вы не можете вызывать его из статического метода main()
если вы не создадите экземпляр SpecialAssignment1
и вызовите метод на этом объекте.
вам нужно создать экземпляр вашего SpecialAssignment1, а затем вызвать метод из него, поскольку абстрактный требует объекта.
Как говорили другие люди, вам нужно создать экземпляр SpecialAssignment1
, а затем вызвать printMenuSelection()
на нем. Часть того, что делает это запутанным, однако, заключается в том, что вы застряли основной метод в классе интерфейса меню. Все это имело бы смысл, если бы у вас был класс SpecialAssignment1
с основным методом и отдельным классом MenuGenerator
со всеми MenuGenerator
генерации меню.