我目前正在学习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;
}
}
在我的主要内容中,我创建了一个类型为employee的对象数组,其大小为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个。
PS。对不起我的冗长问题,代码块和缺乏/缺乏术语。我是新来的。
答案 0 :(得分:7)
当你需要动态调整它们时,不要费心使用数组,除非它是绝对必要的(即使在这种情况下你只能转换为ArrayList.toArray(..)
)。
使用ArrayList<Employee>
代替Employee[]
。您不必担心容量,您不必担心删除和移动元素。它还支持通用容器。
作为旁注:Java的命名约定建议对类使用Capitalized
名称。
答案 1 :(得分:0)
Java数组(带有一个小的“a” - 一个[]
对象)在创建时是固定大小的。因此,如果使用10个元素创建数组,它将始终具有10个元素(尽管其中一些元素可能没有非空值)。如果你需要增加阵列的大小超出它当前分配的大小,那么祝你好运! ....呃,我的意思是你必须分配一个新的,更大的数组,然后将较小数组的内容复制到其中。
以这种方式复制数组并不是那么低效,但是它很笨拙且容易出错,所以有几个JDK类(例如java.util.ArrayList)可以容纳一个可变长度列表并管理丑陋的东西给你。 (说实话,一般来说,这些类保留一个内部数组,并在需要时将其复制到更大的数组,就像你一样,所以它们不再有效。但它们简化了编码并减少了错误,这就是重点。 )
答案 2 :(得分: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());
}
答案 3 :(得分: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)
它允许您将现有数组复制到具有新大小的新(空)数组。