Java 我收到错误500和空指针异常

Java 我收到错误500和空指针异常,java,forms,jsp,Java,Forms,Jsp,我正在做一个关于java在线考试的项目。 我面临一个问题 在开始的基础上,我的数据库中有15个问题,我正在按顺序获取这些问题。 问题是,如果我尝试所有答案,我会得到结果,否则我会得到error 500和NullPointerException。问题是多项选择题。每个问题都有四个选择。如果我没有尝试所有的问题,那么我会得到上面的错误 <%@page import="java.sql.*"%> <% String st[] = new String[20]; St

我正在做一个关于java在线考试的项目。 我面临一个问题

在开始的基础上,我的数据库中有15个问题,我正在按顺序获取这些问题。 问题是,如果我尝试所有答案,我会得到结果,否则我会得到
error 500
NullPointerException
。问题是多项选择题。每个问题都有四个选择。如果我没有尝试所有的问题,那么我会得到上面的错误

<%@page import="java.sql.*"%>

<%
    String st[] = new String[20];
    String ans[] = new String[20];
    int k=0;
    //int length = Integer.parseInt(request.getAttribute("length").toString());
    for (int i = 0; i < 15; i++)
    {
        int j = i + 1;
        st[i] = request.getParameter("radio" + j);
        System.out.println(st[i]);
    }
    Class.forName("oracle.jdbc.OracleDriver");
    Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "root", "root");
    Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery("Select ANS from ANSWERS order by ID");
    //String ans = "";
    int t;
    while (rs.next()) {

        ans[k] = rs.getString("ans");
        k++;
        System.out.println(ans[k]);
    }

    int count = 0;
    //String answers[] = ans.split(" ");
    for (int i = 0; i < 15; i++) {
        if (st[i].equals(ans[i])) {
            count++;
        }

    }
    out.println("Your " + count + " answers are correct");
%>

我想说的是,您的答案并没有随您的请求一起提交。如果某个问题的无线组没有选定的值,则该无线组不会成为提交表单后您正在处理的POST请求的一部分

这就是为什么首先会出现空指针异常。 我无法运行上面的示例,但我假设错误发生在示例末尾的比较行中:

if (st[i].equals(ans[i])) {
更新

要快速修复,只需将计算值:
st[i].equals(ans[i])
切换到
ans[i].equals(st[i])
。这样,您就可以始终对null进行等于运算,并获得正确的计数。

在代码开始时,您正在使用
request.getParameter(“radio”+j)初始化
st[]
这可能为空。根据for
getParameter()

以字符串形式返回请求参数的值,如果 参数不存在

因此,当您尝试执行以下代码时:

for (int i = 0; i < 15; i++) {
    if (st[i].equals(ans[i])) {
        count++;
    }
}
for(int i=0;i<15;i++){
if(st[i].等于(ans[i])){
计数++;
}
}

有可能
st[i]
实际上是
null
。这可能是代码中出现
NullPointerException
的原因

您应该将您的逻辑封装在try-catch和finally-handle中,以处理连接的SQL异常rs(在单独的try-catch块中)
另外,试着在堆栈跟踪处查找,看看哪一行出现空指针异常

你的意思是如果你不尝试所有的问题,那么你就得到了错误?在代码中使用断点,看看错误pop上传到哪一行,了解空指针异常的意思空指针异常说了什么?这通常会给出一些提示,指出意外的空值在哪里。JSP中的代码块让我畏缩。JSP中的数据库代码让我哭哭啼啼。永远不要编写假定某个参数会或不会从客户端包含的逻辑。改为在服务器上处理空方案。@pap这一点你是对的。我只是想快速解决这个问题,这个问题已经是一团糟了,但没有多大帮助。