Я наткнулся на проблему, и я не уверен, что мне не хватает. Здесь я добавлю много кода, большая часть которого, вероятно, не понадобится для ответа на мой вопрос.
У меня есть класс с именем Employee, это просто класс для объекта типа Employee:
class Employee extends ObjectIDs implements Output {
private String firstName;
private String lastName;
private static final String VALID_EMPLOYEE_NAME = "^[a-zA-Z]{2,50}$";
Employee(Integer id, String firstName, String lastName) throws Exception {
super(id);
this.setNames(firstName, lastName);
}
private void setNames(String firstName, String lastName) throws Exception {
if ( !firstName.matches(VALID_EMPLOYEE_NAME) || !lastName.matches(VALID_EMPLOYEE_NAME)) {
throw new IllegalArgumentException (Store.ERR_PREFIX+"Please use english letters only ");
}
this.firstName = firstName;
this.lastName = lastName;
}
String getNames () {
return this.firstName+" "+lastName;
}
public String createOutput() {
return this.id+","+this.firstName+","+this.lastName;
}
}
У меня есть класс Store, внутри которого я создаю список сотрудников и кучу других вещей. Все методы для всех остальных классов go есть. Например, есть методы newEmployee
и removeEmployee
, которые получают доступ к списку, который я упомянул, et c. Он также будет включать другие методы для классов, таких как Product
, но это только пример. Это класс Store
:
class Store {
private ArrayList<Employee> employees = new ArrayList<>();
private ArrayList<Product> products = new ArrayList<>();
static final String EMPLOYEES_FILE_PATH = "employees.csv";
static final String PRODUCTS_FILE_PATH = "items.csv";
static final String EMPLOYEES_LIST = "employees";
static final String PRODUCT_LIST = "prodcuts";
static final String ERR_PREFIX = "*********\nERROR\n*********\n";
Employee newEmployee(Integer id ,String firstName, String lastName) throws Exception { //Create a new employee
for ( Employee e : employees ) {
if (id == e.id) {
throw new IllegalArgumentException(ERR_PREFIX + "This employee ID already exist.");
}
}
Employee e = new Employee(id, firstName, lastName);
this.employees.add(e);
System.out.println("Employee "+e.createOutput()+" added to the employees list");
return e;
}
void deleteEmployee(Integer id) throws Exception { //Remove Employee
for(int i = 0; i<employees.size(); i++) {
if(employees.get(i).id == id) {
System.out.println("Employee "+employees.get(i).createOutput()+" was deleted sucsessfully.");
employees.remove(i);
return;
}
}
throw new IllegalArgumentException("Sorry, no such employee.");
}
}
У меня есть другой класс, в котором я создаю меню. Это в основном меню, которое вызывает подменю, и оттуда я хочу выполнять методы.
import java.util.Scanner;
public class Menu {
/**
* @param args
*/
public static void main(String[] args) {
Menu menu = new Menu();
menu = menu.mainMenu(menu);
System.out.println("Thanks for visiting");
}
private Menu mainMenu(Menu menu) {
System.out.println("Welcome to my store");
int selection = 0;
do {
System.out.println("[1] I'm a customer");
System.out.println("[2] I'm an employee");
System.out.println("[3] Quit");
System.out.print("Insert selection: ");
Scanner sc = new Scanner(System.in);
selection = sc.nextInt();
switch (selection) {
case 1: return menu.customerSubMenu(menu);
case 2: return menu.employeeSubMenu(menu);
case 3: return menu;
default:
System.out.println("The selection was invalid!");
}
} while (selection != 3);
return menu;
}
private Menu customerSubMenu(Menu menu) { //Customer options submenu
System.out.println("Welcome dear customer");
int selection = 0;
do {
System.out.println("[1] Register as new customer");
System.out.println("[2] Buy an item");
System.out.println("[3] Return");
System.out.print("Insert selection: ");
Scanner sc = new Scanner(System.in);
//selection = ++testint
selection = sc.nextInt();
switch (selection) {
// case 1: return
// case 2: return
// case 3:
default:
System.out.println("The selection was invalid!");
}
} while (selection != 3);
return menu;
}
private Menu employeeSubMenu(Menu menu) { //Employees options submenu
System.out.println("Welcome employee");
int selection = 0;
do {
System.out.println("[1] Add a product");
System.out.println("[2] Return a product");
System.out.println("[3] Add an employee");
System.out.println("[4] Show all employees");
System.out.println("[5] Return");
System.out.print("Insert selection: ");
Scanner sc = new Scanner(System.in);
// selection = ++testint;
selection = sc.nextInt();
switch (selection) {
// case 1: return
// case 2: return
// case 3: return
case 5:
return menu.mainMenu(menu);
default:
System.out.println("Invalid selection");
}
} while (selection != 5);
return menu;
}
}
Если вы прокрутите вниз до employeeSubMenu
, вы увидите закомментированный мной case 3
, который я хочу использовать для запуска метода newEmployee
, который находится внутри класса Store
. Проблема в том, что я делаю что-то не так. Это не позволит мне сделать это, и я не могу назвать это ни по Store.newEmployee
, ни по его прямому имени. Вопрос в том, почему.
Я хотел бы получить некоторую помощь.
Пожалуйста, предположите, что я очень новичок в Java в ваших ответах, если это возможно, поскольку я честно только учусь.