java - 无法从类型 SpecialAssignment1 静态引用非静态方法 printMenuGetSelection()

标签 java debugging non-static static

预编辑:问题是当我将其标记为静态时,所以

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/

相关文章:

python - 如何在 Python 中调试 iOS Selenium 测试

java - 从方法内部对非静态方法进行静态引用

java - 有一个不使用实例变量的非静态方法有意义吗?

Java Web Start 和文件夹

Java int 与 0x 十六进制

java - Netbeans 调试器不会在断点处停止

debugging - 如何调试字体锁定关键字错误

java - 如何在hadoop中打印文件的第一行和最后一行?

android - eclipse 安卓 : Could not open Selected VM debug port (8700)

c++ - C++中静态类的优点和缺点