我正在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");
%>
答案 0 :(得分:0)
我会说你的答案根本没有随你的要求一起提交。如果问题的无线电组没有选定值,则该无线电组不会成为表单提交后您正在处理的POST请求的一部分。
这就是为什么你首先得到Null指针异常的原因。 我不能辜负你上面的例子,但我认为错误发生在你的例子末尾的比较行中:
if (st[i].equals(ans[i])) {
<强>更新强>
要快速解决问题,只需将评估值st[i].equals(ans[i])
切换为ans[i].equals(st[i])
即可。这样你总是可以对null做一个等于null并获得正确的计数。
答案 1 :(得分:0)
在代码开始时,您使用st[]
初始化request.getParameter("radio" + j);
这可能会为空。根据{{1}}的{{3}}:
以String形式返回请求参数的值,如果是,则返回null 参数不存在。
因此,当您尝试执行以下代码时:
getParameter()
for (int i = 0; i < 15; i++) {
if (st[i].equals(ans[i])) {
count++;
}
}
实际上st[i]
可能是null
。这可能可能是您代码中NullPointerException
的原因
答案 2 :(得分:0)
你应该将你的逻辑包含在try catch中,最后处理连接的SQL异常,rs(在单独的try catch块中) 另外,尝试在堆栈跟踪上进行lloking,以确定哪一行给出空指针异常