Невозможно сделать статическую ссылку на нестатический метод printMenuGetSelection () из типа SpecialAssignment1 [duplicate]

1

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();
}
  • 0
    Это не дубликат, ответы на этот вопрос были очень точны по отношению к его вопросу и не помогли мне решить мою проблему.
  • 0
    Позволю себе не согласиться. Ответы на этот вопрос только с использованием его кода, потому что было легче всего сделать пример из них. Причина ошибки, безусловно, здесь применима.
Теги:
debugging
static
non-static

3 ответа

0

Поскольку printMenuGetSelection() не статичен, вы не можете вызывать его из статического метода main() если вы не создадите экземпляр SpecialAssignment1 и вызовите метод на этом объекте.

0

вам нужно создать экземпляр вашего SpecialAssignment1, а затем вызвать метод из него, поскольку абстрактный требует объекта.

  • 0
    Спасибо, не могли бы вы объяснить, как я это сделаю, пожалуйста?
  • 0
    В основном вы можете сделать SpecialAssignment1 sAssignment = new SpecialAssignment1 (); sAssignment.printMenuGetSelection ();
0

Как говорили другие люди, вам нужно создать экземпляр SpecialAssignment1, а затем вызвать printMenuSelection() на нем. Часть того, что делает это запутанным, однако, заключается в том, что вы застряли основной метод в классе интерфейса меню. Все это имело бы смысл, если бы у вас был класс SpecialAssignment1 с основным методом и отдельным классом MenuGenerator со всеми MenuGenerator генерации меню.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню