2

我目前正在学习 Java,但不太确定如何做到这一点。

目前我有一个员工班

public class employee {

private int empID;
private String empName;
private String job;

//constructors;

public employee(){
    this.empID = 0;
    this.empName = "";
    this.job = "";
}
public employee(int empID, String empName, String job){
    this.empID = empID;
    this.empName = empName;
    this. job = job;
}

//gets;

public int getEmpID(){
    return this.empID;
}
public String getEmpName(){
    return this.empName;
}
public String getJob(){
    return this.job;
}

//sets;

public void setEmpID(int empID){
    this.empID = empID;
}
public void setEmpName(String empName){
    this.empName = empName;
}
public void setJob(String job){
    this.job = job;
}

}

在我的主目录中,我创建了一个大小为 2 的员工类型的对象数组,然后只增加数组计数,同时让用户输入一些基本信息,然后另一个循环打印输入的所有信息。

import java.util.Scanner;
public class employeeArray {

public static void p(String s) {System.out.println(s);}

public static void main(String args[]){
    Scanner k = new Scanner(System.in);
    int empID, size=0, x=0;
    String empName;
    String job;
    employee [] employees = new employee[2];

    for(size = 0; size < 2; size++)
    {
        p("Employee "+(size+1));
        p("Please enter employee ID number: ");
        empID = k.nextInt(); k.nextLine();
        p("Please enter your name: ");
        empName = k.nextLine();
        p("Please enter your job role: ");
        job = k.nextLine();

        employees[size] = new employee();

        employees[size].setEmpID(empID);
        employees[size].setEmpName(empName);
        employees[size].setJob(job);


    }

    for(x=0; x<2;x++){
        p("Hello employee: "+employees[x].getEmpName()+" your job role is "+employees[x].getJob()+ 
                " your log in ID is 0800"+employees[x].getEmpID());
    }
}

}

我了解如何通过输入填充对象的每个实例,但说我想将大小从 2 增加到 20,但已经有前 10 个“预输入”,所以我可以显示我目前拥有但仍然允许输入的 10 个还有10个。

附言。抱歉我的冗长问题、代码块和术语不佳/缺乏。我是新手。

4

4 回答 4

7

当您需要动态调整数组大小时,不要打扰使用数组,除非它是绝对必要的(即使在这种情况下,您也可以通过 转换ArrayList.toArray(..))。

使用 anArrayList<Employee>而不是Employee[]. 您不必担心容量,也不必担心删除和移动元素。它还将支持通用容器。

附带说明:Java 的命名约定建议使用Capitalized类的名称。

于 2013-03-20T20:31:45.423 回答
0

首先将类名更改为,Employee而不是employee. 坚持使用 java 命名约定。现在您应该改用 java 实用程序类。例如ArrayList<Employee>ArrayList实现了动态调整数组大小,这让用户可以在其中插入尽可能多的数据,而不必担心内部的当前大小,array因为ArrayList可以处理它。但是在使用ArrayList存储Employee对象之前,您需要覆盖equals方法,Employee因为ArrayList内部使用此方法来找出某些方法中是否存在类似对象。该equals方法在类中如下所示Employee

@Override
public boolean equals(Object anObject) 
{
    if (this == anObject) 
    {
        return true;
    }
    if (anObject instanceof Employee) 
    {
        Employee anotherEmployee = (Employee)anObject;
        if ((this.toString()).equals(anotherEmployee.toString()))
        {
            return true;
        }
        return false;
    }
    return false;
}
@Override
public String toString()//Override it so that it could be easier to compare two objects of Employee using toString()
{
    return empID+","+empName+","+job;
}

现在,您可以通过ArrayList以下方式使用:

List<Employee> list = new ArrayList<Employee>();
for(size = 0; size < 2; size++)
    {
        p("Employee "+(size+1));
        p("Please enter employee ID number: ");
        empID = k.nextInt(); k.nextLine();
        p("Please enter your name: ");
        empName = k.nextLine();
        p("Please enter your job role: ");
        job = k.nextLine();

        Employee employee = new Employee();

        employee.setEmpID(empID);
        employee.setEmpName(empName);
        employee.setJob(job);
        list.add(employee);
    }

   for(int i = 0 ;i < list.size() ; i++){
    Employee employee = list.get(i);
    p("Hello employee: "+employee.getEmpName()+" your job role is "+employee.getJob()+ 
            " your log in ID is 0800"+employee.getEmpID());
}
于 2013-03-20T20:52:12.390 回答
0

根据您的评论,您实际上不想要一个动态数组,而是输入一个固定大小为 20 和 10 的数组。

例子:

int[] intArray = new int[20];

intArray[0] = 1
intArray[1] = 2
intArray[2] = 3
intArray[3] = 4
intArray[4] = 5
intArray[5] = 6
intArray[6] = 7
intArray[7] = 8
intArray[8] = 9
intArray[9] = 10

//now to fill the rest of the slots.
for(int i = 10; i < intArray.length; i++) {
    intArray[i] = i + 1;
}

但是,您将负责跟踪数组中的内容和不包含的内容,并且您不能向数组中添加超过 20 个项目。

编辑:您编辑了您的帖子。使用上面的代码,你可以做你想做的事。如果你真的想在不使用 ArrayList 的情况下动态增加你的数组,你可以使用 System#arrayCopy

http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#arraycopy(java.lang.Object , int, java.lang.Object, int, int)

它允许您将现有数组复制到具有新大小的新(空)数组。

于 2013-03-20T21:01:43.627 回答
0

Java 数组(带有一个小的“a”——一个[]对象)在创建时是固定大小的。因此,如果您创建包含 10 个元素的数组,它将始终恰好有 10 个元素(尽管其中一些可能没有非空值)。如果您需要将数组的大小增加到超出当前分配的大小,那么祝您好运!!.... 呃,我的意思是你必须分配一个新的、更大的数组,然后将较小数组的内容复制到其中。

以这种方式复制数组并不是那么低效,但它很笨拙且容易出错,因此有几个 JDK 类(例如 java.util.ArrayList)可以保存可变长度列表并管理丑陋的东西你。(说实话,一般来说,这些类保留一个内部数组并在需要时将其复制到更大的数组中,就像您一样,所以它们效率不高。但它们简化了编码并减少了错误,这就是重点。 )

于 2013-03-20T20:47:49.930 回答