当前位置: 首页 > 知识库问答 >
问题:

尝试捕捉ArrayIndexOutOfBoundsExctive?

花稳
2023-03-14

我的项目由一个小图标组成,它在一个尺寸为25×20的网格上移动。我知道我可以用几个if/else块轻松地完成这项工作,但我想了解更多关于错误处理的知识。

我当时想的是使用try-catch,但它根本不会捕获数组索引越界异常或任何异常:它不会返回“error”或位置,因此它永远不会进入catch块。

我在想这样的伪代码

try {
    // Code
} catch(The exception) {
   x - 1 or + 1
}

实际代码:

 public void tick() {
    Random rand = new Random();
    try {
        int x, y;
        x = rand.nextInt(3) + (-1); //Slumpar fram en siffra (-1, 0, 1)
        y = rand.nextInt(3) + (-1); 
        setPosition(new Point((int)getPosition().getX()+x,(int)getPosition().getY() + y));
    } catch(Exception e) {
        System.out.println("error");
    }
    System.out.println("x: " + getPosition().getX());
    System.out.println("y: " + getPosition().getY());
}

public String type() {
    return "Dummy";
}

共有3个答案

东郭鸿福
2023-03-14
 try {
                //code related  something to array
            }
            catch(ArrayIndexOutOfBoundsException ignored) {

            }
凌波峻
2023-03-14

只有当一个或多个方法可以抛出异常时,将代码放入try-catch块才有意义。您可以抛出如下异常:

public static void setPosition(int x, int y) throws Exception
{
    if(x<0 || y<0) throw new Exception("coordinate components must be greater than zero");
    else...
}
徐飞尘
2023-03-14

我在代码中的任何地方都看不到数组,所以这可能就是try块没有捕获任何内容的原因(我假设其中一个被调用的方法中有一个数组?)。另外,你真的,真的不应该允许你的程序读取数组之外的内容。那只是个糟糕的设计。话虽如此,以下是你将如何以我能想到的最清晰的方式捕捉异常:

try {
    array[index] = someValue;
}
catch(ArrayIndexOutOfBoundsException exception) {
    handleTheExceptionSomehow(exception);
}

或者像@Peerhenry建议的那样,如果索引不正确,就抛出一个新的异常,这将是一个更好的设计。

 类似资料:
  • 我在使用这个try/catk语句时遇到了麻烦。我试图用它抛出一条错误消息,上面写着,“请输入一个整数!”如果用户输入一个字母。我使用的第一个成功了,但是它最终需要两行用户输入,而不仅仅是一行,所以它基本上跳过了一个应该问的问题。在那之后,其他的都不起作用,它们只是被完全跳过。我还需要对用户输入做同样的事情,如果用户在字母应该在的地方输入整数,它会抛出一条错误消息,上面写着“请输入字符串!”。我知道

  • 问题内容: 我正在使用Python,每当必须验证函数输入时,我都认为输入有效,然后捕获了错误。 就我而言,我有一个通用类,用于一些不同的事情,其中​​之一是加法。它既作为类又作为a起作用,因此当我向标量添加标量时,应将该常数添加到每个单独的组件中。和加法需要按组件进行加法。 这段代码被用于光线追踪器,因此任何速度提升都很棒。 这是我班的简化版: 我目前正在使用该方法。有人知道更快的方法吗? 编辑:

  • 问题内容: 我需要捕捉一些从PHP本机函数抛出的警告,然后处理它们。 特别: DNS查询失败时,它将引发警告。 / 不起作用,因为警告也不例外。 我现在有2个选择: 似乎有点过分,因为我必须使用它来过滤页面中的每个警告(这是真的吗?); 调整错误报告/显示,以使这些警告不会在屏幕上显示,然后检查返回值;如果为,则找不到主机名的记录。 这里的最佳做法是什么? 问题答案: 设置和还原错误处理程序 一种

  • 我在do while loop中尝试执行try-catch语句时遇到了一个问题,我要求用户首先输入字母,然后输入一个数字,如果他输入正确,程序结束;如果他输入字母而不是数字,程序应该说“发生错误,请输入数字”,并要求用户再次输入数字,但每次我输入字母而不是数字,程序就进入了一个无限循环,不允许我输入新的值。只是说“发生错误,您必须输入数字”“请输入数字”。

  • 我的sp中有一个try catch块,try中只有一个insert语句。捕捉检查错误代码,如果是pk违规,如果是则做更新。但是有时我会得到“当前事务不能被提交,不能支持写入日志文件的操作。回滚事务。 在批处理结束时检测到不可提交的事务。事务被回滚了“,所以我添加了xact_abort,但后来我不断得到”EXECUTE之后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配“,我发现了这一

  • 我想嵌套一个try catch,但内部try中没有捕获。 例如: 这可能吗?这是一种良好的做法吗?