IndexOutOfBoundsException不起作用

时间:2013-04-23 10:46:28

标签: java bluej

我试图在索引超出范围时显示错误消息,但即使数组列表中没有元素,我的当前代码也没有显示相应的错误消息。

这是我试图实现异常的部分的代码块。 为了解释,make调用方法获取显示,该显示是与数组元素对应的数字,然后显示来自正确索引的调用。

public void makeCall()
{
    Mobile phoneCall = (Mobile) gadgets.get(getDisplay());
    phoneCall.PhoneCall(getPhoneNumber(), getDuration());
    System.out.println();
}

public int getDisplay()
{
    int gadgetDisplay = 0;
    try
    {
        gadgetDisplay = Integer.parseInt(displayText.getText());

    if (gadgetDisplay< 0)
    {
      JOptionPane.showMessageDialog
      (frame, "Please enter a positive Display");  
    }
    }
    catch(NumberFormatException exception)
    {
        JOptionPane.showMessageDialog
        (frame, "Please enter a positive Display");
    }
    catch(IndexOutOfBoundsException exception)
    {
        JOptionPane.showMessageDialog
        (frame, "Gadget is not listed");
    }
    return gadgetDisplay;
}

4 个答案:

答案 0 :(得分:0)

只有try块中的代码抛出IndexOutOfBoundsException时,才会执行第二个catch块。

目前,您的try块中没有任何内容会抛出该异常。正如您所说,ArrayList在其他地方处理,您很可能需要将尝试访问ArrayList元素的代码放在其自己的try catch块中。需要在那里处理异常。

老实说,我认为你在这里发布了错误的代码。

答案 1 :(得分:0)

您不会产生所需的异常,因为您没有尝试做某事,因此会发生异常。

OutOfBound异常意味着您正试图从范围外获取值

public int getDisplay()
{
    int gadgetDisplay = 0;
    ArrayList arr = new ArrayList();
    arr.add("a");
    try
    {
        String str = arr.get(3);

    if (gadgetDisplay< 0)
    {
      JOptionPane.showMessageDialog
      (frame, "Please enter a positive Display");  
    }
    }
    catch(NumberFormatException exception)
    {
        JOptionPane.showMessageDialog
        (frame, "Please enter a positive Display");
    }
    catch(IndexOutOfBoundsException exception)
    {
        JOptionPane.showMessageDialog
        (frame, "Gadget is not listed");
    }
    return gadgetDisplay;
}

上面的代码会产生异常。 我不确定你是如何期待从ArrayList

的异常

答案 2 :(得分:0)

您不应该使用try / catch块来执行此操作 - 您已经知道ArrayList中有多少元素,因此只需使用size()来确保该数字在该范围内。

答案 3 :(得分:0)

如果需要检查大小,那么可以调用size()方法,也可以抛出异常,因此makeCall方法可以决定操作:

public void makeCall() {
    try {
        Mobile phoneCall = (Mobile) gadgets.get(getDisplay());
        phoneCall.PhoneCall(getPhoneNumber(), getDuration());
        System.out.println();
    }
    catch(NumberFormatException exception) {
        JOptionPane.showMessageDialog(frame, "Please enter a positive Display");
    }
    catch(IndexOutOfBoundsException exception) {
        JOptionPane.showMessageDialog(frame, "Gadget is not listed");
    }
    catch(IllegalArgumentException exception) {
        JOptionPane.showMessageDialog(frame, "Please enter a positive Display");
    }
}

public int getDisplay() throws NumberFormatException
{
    int gadgetDisplay = Integer.parseInt(displayText.getText());

    if (gadgetDisplay < 0) {
        throw new IllegalArgumentException("Please enter a positive Display");  
    }
    else if ( gadgetDisplay >= yourList.size() ) {
        throw new IndexOutOfBoundsException("Gadget is not listed");
    }

    return gadgetDisplay;
}

或者你可以用一种方法做到:

public void makeCall() {
    try {
        int gadgetDisplay = Integer.parseInt(displayText.getText());

        if (gadgetDisplay < 0) {
            JOptionPane.showMessageDialog(frame, "Please enter a positive Display");
        }
        else if ( gadgetDisplay >= yourList.size() ) {
            JOptionPane.showMessageDialog(frame, "Gadget is not listed");
        }
        else {
            Mobile phoneCall = (Mobile) gadgets.get(getDisplay());
            phoneCall.PhoneCall(getPhoneNumber(), getDuration());
            System.out.println();
        }
    }
    catch(NumberFormatException exception) {
        JOptionPane.showMessageDialog(frame, "Please enter a positive Display");
    }
}