Java 显示信息

Java 显示信息,java,arrays,object,methods,Java,Arrays,Object,Methods,在学校的一个项目中,我需要制作一个包含以下选项的菜单系统: 加载员工数据-提示用户输入要加载的员工人数,然后提示输入每个员工的姓名、id(5位数)和年薪 添加新员工-提示用户输入员工数据、姓名、id和年薪 显示所有员工-将每个员工的数据显示到控制台,每行显示一名员工 检索特定员工的数据-提示用户输入员工id并显示相应员工的数据:id、姓名和工资 检索基于范围工资的员工-提示用户输入最低和最高工资,并显示工资在该范围内的所有员工。在单独的行中显示每个员工的所有信息—姓名、id和薪资 出口 每个菜单

在学校的一个项目中,我需要制作一个包含以下选项的菜单系统:

  • 加载员工数据-提示用户输入要加载的员工人数,然后提示输入每个员工的姓名、id(5位数)和年薪
  • 添加新员工-提示用户输入员工数据、姓名、id和年薪
  • 显示所有员工-将每个员工的数据显示到控制台,每行显示一名员工
  • 检索特定员工的数据-提示用户输入员工id并显示相应员工的数据:id、姓名和工资
  • 检索基于范围工资的员工-提示用户输入最低和最高工资,并显示工资在该范围内的所有员工。在单独的行中显示每个员工的所有信息—姓名、id和薪资
  • 出口
  • 每个菜单选项都必须是它自己的,有它自己的方法,他更喜欢我们使用数组而不是列表,这就是为什么我分配了100个空格。这是我到目前为止所拥有的。菜单选项1、2和6在不中断程序的情况下运行。但是任何需要展示东西的地方似乎都被打破了。我的最佳猜测是,在所有方法之间传递和更新数组“employees”存在问题

    package practice;
    
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Project {
        
        public static Employee[] loadData() {
            Scanner scanint = new Scanner(System.in);
            Scanner scanstr = new Scanner(System.in);
            
            System.out.println("How many employees would you like to add?"); //Determines how many employees to create
            Employee[] employees = new Employee[100];
            int numberEmployees = scanint.nextInt();
            for (int i = 0; i < numberEmployees; i++) {
                System.out.println("Enter name: ");
                String empName = scanstr.nextLine();
                System.out.println("Enter ID: ");
                int empID = scanint.nextInt();
                System.out.println("Enter Salary: ");
                int empSalary = scanint.nextInt();
                employees[i+1] = new Employee(empName, empID, empSalary); //Add employee to array
            }
            return employees;
        }
        
        public static Employee addEmployee() {
            Scanner scanint = new Scanner(System.in);
            Scanner scanstr = new Scanner(System.in);
            System.out.println("Enter name: ");
            String empName = scanstr.nextLine();
            System.out.println("Enter ID: ");
            int empID = scanint.nextInt();
            System.out.println("Enter salary: ");
            int empSalary = scanint.nextInt();
            return new Employee(empName, empID, empSalary);
        }
        
        public static void displayEmployees(Employee[] employees) {
            for (int i = 0; i < employees.length; i++) {
                if (employees[i] != null) {
                    System.out.println(Arrays.toString(employees));
                    //System.out.println("Employee Name: " + employees[i].name + " ID: " + employees[i].id + " Salary: " + employees[i].salary);
                }
            }
        }
        
        public static void specificEmployee(Employee[] employees, int id) {
            for (int i = 0; i < employees.length; i++) {
                if (employees[i].id == id) {
                    System.out.println("Name: " + employees[i].name + " ID: " + employees[i].id + " Salary: " + employees[i].salary);
                }
                else {
                    System.out.println("ID not recognized");
                }
            }
        }
        
        public static void salaryRange(Employee[] employees, int salaryMinimum, int salaryMaximum) {
            for (int i = 0; i < employees.length; i++) {
                if (employees[i].salary >= salaryMinimum && employees[i].salary <= salaryMaximum) {
                    System.out.println("Name: " + employees[i].name + " ID: " + employees[i].id + " Salary: " + employees[i].salary);
                }
                else {
                    System.out.println("No employees within salary range");
                }
            }
        }
    
        public static void main(String[] args) {
            
            Scanner scanint = new Scanner(System.in);
            Scanner scanstr = new Scanner(System.in);
            int menuChoice = 0;
            while (menuChoice != 6) {
                System.out.println("\tMenu:");
                System.out.println("1. Load Employee Data");
                System.out.println("2. Add New Employee");
                System.out.println("3. Display All Employees");
                System.out.println("4. Retrieve Specific Employee Data");
                System.out.println("5. Retrieve Employees Within Salary Range");
                System.out.println("6. Exit");
            
                menuChoice = scanint.nextInt();
                Employee[] employees = new Employee[100];
                int amountEmployees;
            
            
                
                if (menuChoice == 1) {
                    employees = loadData();
                }
                else if (menuChoice == 2) {
                    employees[0] = addEmployee();
                }
                else if (menuChoice == 3) {
                    displayEmployees(employees);
                }
                else if (menuChoice == 4) {
                    System.out.println("Enter 5 digit employee ID: ");
                    int id = scanint.nextInt();
                    specificEmployee(employees, id);
                }
                else if (menuChoice == 5) {
                    System.out.println("Enter minimum of salary range: ");
                    int salaryMinimum = scanint.nextInt();
                    System.out.println("Enter maximum of salary range");
                    int salaryMaximum = scanint.nextInt();
                    salaryRange(employees, salaryMinimum, salaryMaximum);
                }
                else if (menuChoice == 6) {
                    break;
                }
                else {
                    System.out.println("Invalid Choice");
                }
    
            }
            scanint.close();
            scanstr.close();
    
        }
    
    包装实践;
    导入java.util.array;
    导入java.util.Scanner;
    公共类项目{
    公共静态员工[]加载数据(){
    Scanner scanint=新扫描仪(System.in);
    Scanner scanstr=新扫描仪(System.in);
    System.out.println(“要添加多少员工?”);//确定要创建多少员工
    员工[]员工=新员工[100];
    int numberEmployees=scanint.nextInt();
    对于(int i=0;i如果(employees[i].salary>=salarymimum&&employees[i].salary代码中存在一些问题:

    while (menuChoice != 6) {
                System.out.println("\tMenu:");
                System.out.println("1. Load Employee Data");
                System.out.println("2. Add New Employee");
                System.out.println("3. Display All Employees");
                System.out.println("4. Retrieve Specific Employee Data");
                System.out.println("5. Retrieve Employees Within Salary Range");
                System.out.println("6. Exit");
            
                menuChoice = scanint.nextInt();
                **Employee[] employees = new Employee[100];**
                int amountEmployees;
            
            
                
                if (menuChoice == 1) {
                    employees = loadData();
                }
    
    您已经在while循环中声明了employees数组,因此每次读取输入时,您都在创建一个新的输入。这完全违背了将员工存储在数组中并稍后检索他们的目的,这也使得分配在
    menuChoice==1
    时变得多余。您必须考虑应该在何处声明数组

    public static void specificEmployee(Employee[] employees, int id) {
            for (int i = 0; i < employees.length; i++) {
                if (employees[i].id == id) {
                    System.out.println("Name: " + employees[i].name + " ID: " + employees[i].id + " Salary: " + employees[i].salary);
                }
                else {
                    System.out.println("ID not recognized");
                }
            }
        }
    
    public static void specific Employee(Employee[]employees,int-id){
    对于(int i=0;i

    当你声明一个数组时,默认值为NULL,除非你给它们分配一些值。在这里,你正在迭代整个数组并检查雇员ID。如果数组中某个索引的雇员为NULL,你应该考虑会发生什么。你必须检查这些情况。 您创建的另一个方法中也存在类似的问题。我将让您自己调试它


    正如@NomadMaker所建议的,您的第二个菜单项只设置数组的元素0。您不能添加两个或更多员工


    我建议您尝试干运行代码,如果您觉得困难,请尝试在ide中调试它。

    您可能应该为每个数组包含一个整数,用于定义所使用的元素数。此外,除非您将每个元素设置为null,否则这些元素不能保证为null。您的第二个菜单项仅设置数组的元素0。Y您不能添加两个或更多员工。我建议您花一些时间学习如何使用ide的调试器。