Java:增强的for循环,未知数组大小

时间:2015-09-12 12:26:38

标签: java arrays loops for-loop

我正在学习Java大约5周,正在做家庭作业。我已经完成了这些要求,但是想要尝试一下该程序,以便在真正使用它时更加实用。

我们的任务是创建5种不同类型的对象,将它们存储在数组中,并使用Enhanced for循环来处理数组。我试图修改程序,允许用户创建1到100个不同的对象,将它们存储在一个数组中,然后使用增强的for循环来处理数组。

我开始创建一个足以容纳100个对象的数组。

    Employee employees[] = new Employee[ 100 ];

问题是如果用户输入的对象少于100个,则大多数数组都是空的。增强的for循环尝试处理这些空白空间并抛出错误。

    for ( Employee currentEmployee : employees ) 
    {
    ...........
    }

这个问题有解决方法吗?我想允许用户确定创建了多少对象,使用数组保存/引用这些对象,并使用增强的for循环处理该数组。有什么办法吗?

谢谢,

布伦特克劳奇

3 个答案:

答案 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
}