我正在创建一个在线考试系统。我设法显示问题并接受答案并发布答案以供检查。我的问题是,在检查结果是真的之后,它给了我错误的答案。
我有4个问题,在选择所有正确答案后,它返回3个标记。我该怎么做才能调试问题?
Resultprocess.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int count=0;
for(int i=1;i<=4;i++) {
String ans =request.getParameter("option"+i);
System.out.println(ans);
Answer Answer= new Answer();
Answer.setAnswer(ans);
CTest cans =new CTest();
boolean ansercheck = cans.getans(Answer);
if(ansercheck==true) {
count++;
}
}
HttpSession session = request.getSession();
String answer=Integer.toString(count);
session.setAttribute("answer", answer);
response.sendRedirect("result.jsp");
}
}
CTest.java
public class CTest {
Connection cn = null;
PreparedStatement ps = null;
Statement st = null;
ResultSet rs = null;
ConnectionFac con = new ConnectionFac();
String selectans = "select Answer from ctest ";
public boolean getans( Answer answer) {
try {
rs = con.getResultSet(selectans);
while(rs.next()) {
String answerDB = rs.getString(1);
Answer ansdb= new Answer();
ansdb.setAnswer(answerDB);
if(answer.equals(ansdb)) {
return true;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
}
result.jsp中
<div class="col-sm-8" >
<form action="#">
<%
String marks= (String)session.getAttribute("answer");
out.print("<font size='5' color='White' >");
out.print(" you got " +marks + " marks");
out.print("</font>");
%>
</form>
</div>
Answer.java getter,setter and equals
package exam.DTO;
public class Answer {
String answer;
public String getAnswer() {
return answer;
}
public void setAnswer(String answer) {
this.answer = answer;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof Answer))
return false;
Answer other = (Answer) obj;
if (answer == null) {
if (other.answer != null)
return false;
} else if (!answer.equals(other.answer))
return false;
return true;
}
答案 0 :(得分:0)
您希望CTest
给出关于答案是否正确的真/假。要做到这一点,你需要提供一些问题参考,以便它可以找到正确的答案。
然而,你在这堂课中所做的是循环回答,直到找到任何匹配的答案。
例如,假设正确的答案是:
并且测试中给出的答案都是错误的:
系统将能够找到每个答案,因此每个答案都会返回true(正确)。我认为这不是你想要的行为。
我认为你的错误首先出现在这里:
public boolean getans( Answer answer) {
这需要某种问题引用 - 问题实例,如果你有任何这样的事情,或者只是一个整数ID。
然后你需要更改它以便将参数发送到它(根据你的列名调整以及如何在Java中进行参数化):
String selectans = "select Answer from ctest WHERE qid = ?";
最后,您需要在此处注入相应的问题ID:
rs = con.getResultSet(selectans);