1

有没有其他方法可以在不使用实际break语句的情况下打破这个循环?问题是由于某种原因,我的教授不喜欢我们在switch中的任何其他地方使用 break

我在将对象添加到数组中下一个空白区域的对象数组中的方法中遇到问题

这是我的代码:(还有其他方法吗?)

public void add(Employee employeeObj)throws ArrayIndexOutOfBoundsException{
        try{
            for(int i= 0; i<MAX; i++){
                if(listEmployee[i] == null){
                    listEmployee[i] = employeeObj;
                    break;
                }

            }
        }catch(ArrayIndexOutOfBoundsException e){
            throw new ArrayIndexOutOfBoundsException("ERROR!");
        }
    }

该方法只需要将employeeObj 添加到数组中,如果是这种情况,则会抛出异常。感谢您的帮助

4

5 回答 5

3

试试这个:

  for(int i= 0; i<MAX; i++){
    if(listEmployee[i] == null){
        listEmployee[i] = employeeObj;
        i=MAX;
    }

但我认为使用休息没有问题。在某些情况下,您希望停止处理循环,并且使用 abreak;比将循环计数器设置为使循环在下一次迭代中停止的值更有意义(并且使其更具可读性!)。

于 2013-02-07T05:07:56.680 回答
2

i = MAX如果您没有这种微不足道的情况,您可以简单地执行或使用布尔标志。

作为个人笔记,禁止使用break外部switch声明没有任何意义。

于 2013-02-07T05:07:20.770 回答
0

由于您的方法在这种情况下没有做任何其他事情,因此您可以使用return代替break

public void add(Employee employeeObj)throws ArrayIndexOutOfBoundsException {
    try{
        for (int i= 0; i<MAX; i++) {
            if (listEmployee[i] == null) {
                listEmployee[i] = employeeObj;
                return;
            }

        }
    } catch(ArrayIndexOutOfBoundsException e) {
        throw new ArrayIndexOutOfBoundsException("ERROR!");
    }
}

但总的来说,这里的其他答案更适用。也就是说,我会请你的教授解释为什么break不应该使用 - 恕我直言,替代品的可读性通常要低得多。

于 2013-02-07T05:10:06.647 回答
0

我在将对象添加到数组中下一个空白区域的对象数组中的方法中遇到问题

我建议简单地找出数组的长度并将对象插入下一个位置。无需迭代数组的完整长度。

public void add(Employee employeeObj){
           int n = listEmployee.length;
                listEmployee[n] = employeeObj;        
    }
}
于 2013-02-07T05:29:32.160 回答
0

或者你可以这样做

     int i = Arrays.asList(listEmployee).indexOf(null);
     if (i >= 0) {
         listEmployee[i] = employeeObj;
     }

请注意, Arrays.asList 创建了一个数组视图,而不是一个新的 List

于 2013-02-07T05:30:46.213 回答