Java Исключение вне границ для входного параметра String для конструктора - PullRequest
1 голос
/ 08 марта 2020

Я новичок в Java и продолжаю пытаться отлаживать свой код безрезультатно. Я пытаюсь использовать arrayList для создания массива для newEmployee и добавить в него список сотрудников (ArrayList>). DateParse, nameParse и addressParse являются отдельными методами, вызываемыми в этом методе массива.

Где ошибка:

import java.util.ArrayList;

public class NewEmployee {

   private ArrayList<ArrayList<String>> allEmployees;
   private ArrayList<String> currentEmployee;


   //Constructor
   NewEmployee(String number, String name, String address, String date) {
      //grab first field, Number
      this.currentEmployee.set(0, number);
      //grab next field, full Name and pass to nameParse as input
      NameParse nameParse = new NameParse(name);
      this.currentEmployee.set(1 , nameParse.getFirstName());
      this.currentEmployee.set(2, nameParse.getLastName());
      //call to Address Parse to separate address fields
      AddressParse addressParse = new AddressParse(address);
      this.currentEmployee.set(3, addressParse.getStreet());
      this.currentEmployee.set(4, addressParse.getCity());
      this.currentEmployee.set(5, addressParse.getStateCode());
      this.currentEmployee.set(6, addressParse.getPostalCode());
      //grab last input field, Hire Date & sent to DateParse
      DateParse dateParse = new DateParse(date);
      this.currentEmployee.set(7, dateParse.getMonth());
      this.currentEmployee.set(8, dateParse.getDay());
      this.currentEmployee.set(9, dateParse.getYear());
      //add the current employee to a row in allEmployees
      this.allEmployees.add(this.currentEmployee);
   }

   //default constructor
   NewEmployee(){
      this.currentEmployee = new ArrayList<String>();
      //this.allEmployees = new ArrayList<ArrayList<String>>();
   }

   public String[][] toArray() {
      //10 fields for each employee
      String [][] everyEmployee = new String[this.allEmployees.size()][10];
      return everyEmployee;
   }


   public String toString() {
    //create temporary string of values
      StringBuilder tempEmployee = new StringBuilder();
      for (int i=0; i<this.allEmployees.size()-1; i++) {
         //String [] empDetails = new String[allEmployees(i).size]
         for(int j = 0; j<10; j++) {
            //insert arraylist values, elementwise into string
            tempEmployee = tempEmployee.append(this.allEmployees.get(i).get(j));
         }
      }
      //return the string
      return tempEmployee.toString();
   }


   public ArrayList<ArrayList<String>> getAllEmployees() {
      return this.allEmployees;
   }

      public ArrayList<String> getCurrentEmployee() {
      return this.currentEmployee;
   }
}

Из main переменные вводятся правильно и отправляются в пределах спецификаций, но я получите сообщение об ошибке на

this.currentEmployee.set(0, number);

Если кто-нибудь может помочь понять, как заставить это работать или почему это не работает, это было бы удивительно!

1 Ответ

0 голосов
/ 12 марта 2020

Если это может помочь кому-то еще - этот код никогда не работал. Я попытался использовать .add как предложенный комментарий, и он не работал, но с той же ошибкой. Я также попытался выделить 30 на уровне ArrayList, а также использовать код surecapacity.

В итоге получилось: я изменил класс Employee для хранения атрибутов, а не списка или массива.

Затем я создал отдельный класс файла CurrentEmployeeArray, который содержал всю эту информацию в массиве.

В еще одном файле я поместил класс AllEmpArrayList, который объединял всех текущих сотрудников, используя .add.

Я не знаю, почему ни одно из других решений не сработало - все теоретически должно ' мы сделали это Однако дизайн становится более надежным, когда вы разделяете все эти задачи. По мере продвижения вперед go я узнаю, что, хотя, с моей точки зрения, многие «простые» классы усложняют ситуацию, а не помещают все в массив сразу, многие простые классы очень помогают, когда дело доходит до отладки, компиляция и запуск Java программ. Я не знаю, будет ли это справедливо с течением времени - но это пока.

Сотрудник:

/**
 * this method takes a String number, String name, String address, and String 
 * date and sends them to other methods to separate fields and 
 * creates a new employee array.  Public methods include getters, setters, and 
 * toString.
 * @author CaseyJayne
 *
 */
public class NewEmployee {
   private String employeeCode;
   private String firstName;
   private String lastName;
   private String streetAddress;
   private String city;
   private String stateCode;
   private String zipCode;
   private String hireMonth;
   private String hireDay;
   private String hireYear;
   private String [] currentEmployee = new String [10];


   //Constructor
   NewEmployee(String number, String name, String address, String date) {
      setEmployeeCode(number);
      NameParse nameParse = new NameParse(name);
      setFirstName(nameParse.getFirstName());
      setLastName(nameParse.getLastName());
      AddressParse addressParse = new AddressParse(address);
      setStreetAddress(addressParse.getStreet());
      setCity(addressParse.getCity());
      setStateCode(addressParse.getStateCode());
      setZipCode(addressParse.getPostalCode());
      DateParse dateParse = new DateParse(date);
      setHireMonth(dateParse.getMonth());
      setHireDay(dateParse.getDay());
      setHireYear(dateParse.getYear());
   }
}

Класс ArrayList

class AllEmployeesArray {
   private ArrayList<String[]> allEmployeesList= new ArrayList<>();

   AllEmployeesArray(String[] inputArray){
      this.allEmployeesList.add(inputArray);
   }
   //default constructor
   AllEmployeesArray(){
      this.allEmployeesList.ensureCapacity(20);
   }

public void addEmp(String[] inputArray){
      this.allEmployeesList.add(inputArray);
   }
   public ArrayList<String[]> getAllEmployeesList() {
      return this.allEmployeesList;
   }

внутри основного:

String[] newEmpArray= {newEmp.getEmployeeCode(), newEmp.getFirstName(), 
               newEmp.getLastName(), newEmp.getHireDay(), newEmp.getHireMonth(), 
               newEmp.getHireYear(), newEmp.getStreetAddress(), 
               newEmp.getCity(), newEmp.getStateCode(), newEmp.getZipCode()};
         allEmpArray.addEmp(newEmpArray);
...