1

我是 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);

如果有人可以帮助了解如何使这项工作或为什么它不工作,那将是惊人的!

4

1 回答 1

0

如果这可以帮助其他任何人——我从来没有让这段代码工作过。我尝试按照评论建议使用 .add ,但它不起作用,仍然出现同样的错误。我还尝试在 ArrayList 级别分配 30 以及使用 ensurecapacity 代码。

最终起作用的是:我重新设计了 Employee 类来保存属性,没有列表或数组。

然后我创建了一个单独的文件 CurrentEmployeeArray 类,将所有这些信息保存在一个数组中。

在另一个文件中,我放置了 AllEmpArrayList 类,该类使用 .add 将所有 Current Employees 连接在一起。

我不知道为什么其他解决方案都不起作用——理论上都应该这样做。但是,当您也将所有这些任务分开时,设计会更加健壮。随着我的前进,我了解到,尽管从我的角度来看,许多“简单”类使事情变得比一次将所有内容都放入数组更复杂,但在调试、编译、并运行 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);
于 2020-03-12T15:59:01.623 回答