Как получить доступ к переменным массива классов в java?

#java

Вопрос:

Итак, у меня есть массив классов (по крайней мере, я так думаю, я новичок в java и программировании в целом), в котором есть вложенный класс с двумя строками и одним символом.

 Employee[] emps = {
   new Employee(new Name("FirstName",'M', "LastName")), ...
};
 

У меня есть такие методы, как setid, setwage в сотруднике, и мне нужно использовать массив для замены текущего существующего кода, который был закодирован следующим образом:

 Employee emp1 = new Employee(new Name("FirstName",'M', "LastName"));
Employee.setSize(Math.max(emp1.getName().toString().length()));
public static void empIDs(Employee empA,Employee empB,Employee empC,Employee empD){
       empA.setId(1); 
       ...
    }

    public static void printEmps(Employee empA,Employee empB,Employee empC,Employee empD){
        System.out.println("nName" " 
        ".repeat(Employee.getSize()-1) "IDtWagetHourstGrosstStart Date");
        System.out.println(empA);
        ...
    }

 

Я попробовал emps[i] с циклом for, но получил ошибку:

 Exception in thread "main" java.lang.IllegalArgumentException: count is negative: -24
    at java.base/java.lang.String.repeat(String.java:3565)
    at Employee.toString(Employee.java:146)
    at java.base/java.lang.String.valueOf(String.java:3367)
    at java.base/java.io.PrintStream.println(PrintStream.java:1047)
    at EmployeeDemo.main(EmployeeDemo.java:32)
 

и чувствовать себя совершенно потерянным

Комментарии:

1. Что такое метод getSize ? Почему это статический метод ? распечатайте Employee.getSize() перед .повторите, и вы поймете, что вам нужно наклониться для самостоятельной отладки

2. Это метод для установки максимального количества сотрудников

3. Это статический метод, потому что мой профессор сказал использовать его в getSize()

4. распечатайте Employee.getSize() перед .повторите, и вы поймете, что вам нужно самостоятельно выполнить отладку : сделайте это и скажите нам, сколько это стоит

Ответ №1:

Я предполагаю, что ваша проблема заключается в повторении массива с объектами.

Это точно то же самое, что и для примитивных типов данных. например:

Приведенный ниже метод берет массив с сотрудниками и перебирает их всех с помощью расширенного цикла for.

      public void iterateArrayAndDoSomething(Employee[] employees)
     {
         for(Employee emp: employees)
         {
             // emp is the current employee and you can do whatever you want with it.
         }
     }
 

Или с помощью простого цикла:

          for(int i = 0; i < employees.length; i  )
         {
             Employee emp = employees[i];
             // emp is the current employee and you can do whatever you want with it.
         }
 

P. S: Попробуйте прочитать стек ошибок, там написано, что ошибка связана с .repeat() методом string . Это не имеет никакого отношения к циклу, но все же вышеприведенная информация может быть важна для вас.

Комментарии:

1. Попробовал их обоих, и ошибка в Незаконном аргументе для обоих. Вот ссылка на код программы, если это поможет. replit.com/@RoshanLamichha1/EmpProgram#Main.java

2. Вы не можете «догадаться, в чем проблема». Пожалуйста, отвечайте только тогда, когда вы уверены, что проблема и решение ее устраняют. Этот код исправил бы что-то вроде исключения ArrayIndexOutOfBoundsException, и в коде нет использования массива en