我试图在索引超出范围时显示错误消息,但即使数组列表中没有元素,我的当前代码也没有显示相应的错误消息。
这是我试图实现异常的部分的代码块。 为了解释,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;
}
答案 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");
}
}