我正在学习Java大约5周,正在做家庭作业。我已经完成了这些要求,但是想要尝试一下该程序,以便在真正使用它时更加实用。
我们的任务是创建5种不同类型的对象,将它们存储在数组中,并使用Enhanced for循环来处理数组。我试图修改程序,允许用户创建1到100个不同的对象,将它们存储在一个数组中,然后使用增强的for循环来处理数组。
我开始创建一个足以容纳100个对象的数组。
Employee employees[] = new Employee[ 100 ];
问题是如果用户输入的对象少于100个,则大多数数组都是空的。增强的for循环尝试处理这些空白空间并抛出错误。
for ( Employee currentEmployee : employees )
{
...........
}
这个问题有解决方法吗?我想允许用户确定创建了多少对象,使用数组保存/引用这些对象,并使用增强的for循环处理该数组。有什么办法吗?
谢谢,
布伦特克劳奇答案 0 :(得分:3)
为什么不创建一个正确大小的数组:
Employee employees[] = new Employee[userInput];
或者,如果您不希望用户指定尺寸,请使用List<Employee>
并填充它。
答案 1 :(得分:1)
只需使用Scanner变量从用户那里获取整数输入,并使用它来确定数组的大小。
Scanner inputScan = new Scanner(System.in);
System.out.println("Enter number of objects");
Employee employees[] = new Employee[inputScan.nextInt()];
答案 2 :(得分:1)
我同意关于列表而不是数组的首选使用的其他答案,或者从正确大小的数组开始,但如果这些是不可能的,那么您也可以使自己的方法有效。
我不相信null值上的增强for循环阻塞。您可以轻松地自行过滤掉它们。只是做:
Employee employees[] = new Employee[100];
// fill the array
for (Employee currentEmployee : employees) {
if (currentEmployee != null) {
// process currentEmployee
}
}
// or using continue to avoid undue nesting/indentation
for (Employee currentEmployee : employees) {
if (currentEmployee == null)
continue;
// process currentEmployee
}