0

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

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

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

4 回答 4

0

只有当 try 块中的代码抛出IndexOutOfBoundsException.

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

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

于 2013-04-23T10:56:31.500 回答
0

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

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 的 Exception 有何期待

于 2013-04-23T10:58:19.663 回答
0

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

于 2013-04-23T11:14:40.763 回答
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");
    }
}
于 2013-04-23T11:21:46.103 回答