预编辑:问题是当我将其标记为静态时,所以
public static int printMenuGetSelection()
它给了我消息
This Static method cannot hide the instance method from AMenu
我正在编写一个 Java 程序,该程序读取文件并为用户提供多个选项来显示有关文件的内容。我目前正在编写一个菜单界面,它实现了实际的界面并使程序更易于使用。但是,当我尝试在主方法中调用菜单方法时,出现异常。错误出现在主方法中我调用 printMenuGetSelection() 的一个 Activity 行上,它显示
Cannot make static reference to the non-static method printMenuGetSelection() from the type 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 界面。请不要对我的程序提出任何其他更改。如果您认为将菜单作为实现的接口(interface)是愚蠢的,我 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
的实例> 并调用该对象的方法。
关于java - 无法从类型 SpecialAssignment1 静态引用非静态方法 printMenuGetSelection(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24051369/