我的项目包含一个小图标移动到网格上,尺寸为25 x 20.我知道我可以使用一些if / else块轻松完成此操作,但我想了解更多有关错误处理的信息。
我在想的是使用try catch,但它并没有捕获数组索引超出范围异常或任何Exception
:它不会返回"错误"或者位置,所以它永远不会进入捕获区。
我在想这样的伪代码:
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";
}
答案 0 :(得分:15)
我在代码中的任何地方都没有看到数组,所以这可能是为什么try块没有捕获任何东西(我假设其中一个被调用的方法中有一个数组?) 。而且,你真的,真的不应该允许你的程序在数组的范围之外读取。这只是糟糕的设计。话虽如此,这里是你如何以我能想到的最清晰的方式捕捉异常:
try {
array[index] = someValue;
}
catch(ArrayIndexOutOfBoundsException exception) {
handleTheExceptionSomehow(exception);
}
或者像@Peerhenry建议的那样做,如果指数不正确就抛出一个新的例外,这将是一个更好的设计。
答案 1 :(得分:4)
将代码置于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...
}
答案 2 :(得分:-2)
try {
//code related something to array
}
catch(ArrayIndexOutOfBoundsException ignored) {
}