-1

我不知道为什么我的代码没有正确编译。我可以通过代码直到它到达 catch 块。它可以工作,显示消息,所以我知道它正在捕获错误。但是,它结束了我的程序,说我在同一个地方有同样的错误。我看不出我做错了什么。谢谢你的帮助!!

class Verification {

String detAccess(String[] pL, String[] uL, String pass, String user) {
    int pos = 0;
    String access = "";
    try {
        for (int i=0; !user.equals(uL[i]); i++)
            pos++;
    } catch (ArrayIndexOutOfBoundsException exec) {
        System.out.println("Username doesn't exist.");
        throw exec;
    }
    if(pass.equals(pL[pos])) {
        access = "MEMBER";
    } else {
        System.out.println("Incorrect password.");
        access = "DENIED";
    }

    return access;        
}

}

4

6 回答 6

7

您正在重新抛出异常 - throw exec;

于 2013-07-27T18:56:38.253 回答
1

您正在重新抛出异常。

另一件事:

if(pass.equals(pL[pos])) {
    access = "MEMBER";

即使您没有重新抛出它,这也会导致异常再次出现,因为它会尝试检查不存在索引的密码列表。

于 2013-07-27T19:00:03.953 回答
1

您应该将代码重写为如下内容:

int pos = -1;
...
for (int i=0;uL.length; i++)
{
    if(user.equals(uL[i])) { pos=i; break; }
}
...
if(pos==-1)
{
    // user not found
} else {
    // test the pass with pos as index
}
于 2013-07-27T19:00:38.600 回答
0

你正在抛出异常备份。处理异常的重点是它不会继续。

于 2013-07-27T18:57:21.840 回答
0

两个问题:

  1. 您正在捕获并重新抛出异常;如果你“处理它”,你不需要重新抛出它。

  2. 您正在使用“异常处理”来管理程序中的“正常控制流”。这通常被认为是“坏风格”。你不能控制你的迭代,并通过查看其他东西来确定“你完成了”吗?

    更新:即 nio 的示例

于 2013-07-27T18:57:31.467 回答
0

如果您能够运行代码,则该代码正在正确编译。至于以错误结尾的程序,那是因为您抛出了异常:

throw exec;

您成功地捕获了异常,但随后又将其抛出。如果没有其他东西捕捉到它,程序将在错误中终止。

于 2013-07-27T18:57:44.703 回答