如何调试错误计算项目的程序?

时间:2018-04-14 08:50:06

标签: java jsp servlets jdbc

我正在创建一个在线考试系统。我设法显示问题并接受答案并发布答案以供检查。我的问题是,在检查结果是真的之后,它给了我错误的答案。

我有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;
    }

1 个答案:

答案 0 :(得分:0)

啊,我发现了这个问题。这基本上是一个逻辑问题。

您希望CTest给出关于答案是否正确的真/假。要做到这一点,你需要提供一些问题参考,以便它可以找到正确的答案。

然而,你在这堂课中所做的是循环回答,直到找到任何匹配的答案。

例如,假设正确的答案是:

  1. A
  2. C
  3. d
  4. 并且测试中给出的答案都是错误的:

    1. d
    2. C
    3. A
    4. 系统将能够找到每个答案,因此每个答案都会返回true(正确)。我认为这不是你想要的行为。

      我认为你的错误首先出现在这里:

      public boolean getans( Answer answer) {
      

      这需要某种问题引用 - 问题实例,如果你有任何这样的事情,或者只是一个整数ID。

      然后你需要更改它以便将参数发送到它(根据你的列名调整以及如何在Java中进行参数化):

      String selectans = "select Answer from ctest WHERE qid = ?";
      

      最后,您需要在此处注入相应的问题ID:

      rs = con.getResultSet(selectans);