【问题标题】:Creating new objects in the body of a loop在循环体中创建新对象
【发布时间】:2014-03-01 20:16:59
【问题描述】:

我正在尝试编写一个非常基本的 java 程序,该程序将允许用户输入有关某些员工的信息。我想到的是一个 for 循环,它将创建一个单独的 Employee 对象(已经定义的 Employee 类),然后在整个循环运行后将每个对象保留在内存中。像这样的:

      String input = JOptionPane.showInputDialog("How many Employees are we "
         + "entering into the system?");
      int numEmployees = Integer.parseInt(input);

    for (int count = 1; count <= numEmployees; count ++)
    {
    Employee employee(count) = new Employee();
    }

我知道这段代码不起作用;但我希望清楚我想要做的是:循环的每次迭代都会创建一个新对象(employee1,employee2....employeeN),然后有一些代码允许用户输入所需的数据。我已经拥有所有必要的访问器和修改器方法。循环完成运行后,该对象将保留在内存中。 有任何想法吗?谢谢大家!

【问题讨论】:

  • 使用数组。使用数组。使用数组

标签: java object for-loop


【解决方案1】:

听起来你想使用数组

Employee[] employees = new Employee[numEmployees];
for(int i = 0; i < numEmployees; i++)
    employees[i] = new Employee();

【讨论】:

    【解决方案2】:

    尝试将其存储在某个集合中。

         List<Employee> employeList = new ArrayList<Employee>();
    
         for (int count = 1; count <= numEmployees; count ++)
         {
            employeList.add(new Employee());
         }
    

    或者只是在数组中。

             Employee[] employeList = new Employee[numEmployees];
    
             for (int count = 1; count <= numEmployees; count ++)
             {
                employeList[i]=new Employee();
             }
    

    【讨论】:

      【解决方案3】:

      您似乎正在尝试创建变量变量名,这在 Java 中是不可能的。相反,您应该将员工存储在一个数组中。

      Employee[] employees = new Employee[numEmployees];
      

      要将员工添加到数组中,您可以这样做

      employees[count] = new Employee();
      

      【讨论】:

      • 谢谢!这正是我想要的。
      【解决方案4】:

      您可以使用数组(在这种情况下很好,因为您已经知道您将拥有多少员工)或 ArrayList(动态大小,如果您不知道它将包含多少元素则更好)。

      Employee[] employees = new Employee[numEmployees];
      

      那么你应该做的每个周期

      for (int count = 0; count < numEmployees; count ++)
      {
          employees[count] = new Employee();
      }
      

      创建一个新员工并存储它。无论如何,我编辑了您的代码的某些部分。

      count = 1 将是 count = 0 因为数组从 0 开始

      count &lt;= numEmployees 将是 count &lt; numEmployees 由于从 0 开始,&lt;= 将转到numEmployees,并且数组大小为numEmployees-1,这意味着数组“超出范围”。

      【讨论】:

        【解决方案5】:

        您可以使用 java.util.ArrayList 来存储 Employee 对象。您的代码可能如下所示:

        package EmployeeStuff; 
        
        import java.util.ArrayList;
        
        // rest of the class code 
        
        ArrayList<Employee> emps = new ArrayList<Employee>();
        
        
        String input = JOptionPane.showInputDialog("How many Employees are we "
             + "entering into the system?");
          int numEmployees = Integer.parseInt(input);
        
        for (int count = 1; count <= numEmployees; count ++)
        {
            emps.add(new Employee()); // add an employee object to the ArrayList 
        }
        

        :D

        【讨论】:

          【解决方案6】:

          我想这就是你想要的。创建一个Employees的空数组,然后在循环内依次赋值。您也可以像其他答案一样选择 ArrayList。

          String input = JOptionPane.showInputDialog("How many Employees?");
          int numEmployees = Integer.parseInt(input);
          
          Employee[] employess = new Employee[numEmployees];
          for (int count = 0; count < numEmployees; count ++)
          {
              employees[count] = new Employee();
          }
          

          【讨论】:

          • 数组索引从 0 开始,而不是 1。
          【解决方案7】:
          import java.util.*;
          
          public class EmployeeService
          {
              public static List<Employee> createEmployees(int numberOfEmployees)
              {
                  List<Employee> employees = new ArrayList<Employee>();
          
                  for(int i=0; i<numberOfEmployees;i++)
                  {
                      Employee e = newEmployee();
          
                      // gather required employee information
          
                      employees.add(e);
                  }
          
                  return employees;
              }
          
              /**
               * Create an in-memory employee object.
               *
               * @return  in-memory employee object
               **/
              public static Employee newEmployee()
              {
                  return new Employee();
              }
          }
          
          class Employee
          {
          }
          

          【讨论】:

            猜你喜欢
            • 2016-02-22
            • 1970-01-01
            • 1970-01-01
            • 2015-02-04
            • 2011-05-12
            • 1970-01-01
            相关资源
            最近更新 更多