-3

私はJavaでオンライン試験に関するプロジェクトを作成しています。私は問題に直面しています。

ベースを開始すると、データベースに15の質問があり、それらを順番に取得しています。問題は、すべての答えを試してみると結果が得られることerror 500ですNullPointerException。質問は選択式です。すべての質問には 4 つの選択肢があります。すべての質問を試みないと、上記のエラーが発生します。

<%@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");
%>
4

3 に答える 3

0

ロジックを try catch で囲み、接続の SQL 例外を最後に処理する必要があります (別の try catch ブロックで)。

于 2012-08-22T07:40:08.383 に答える
0

コードの開始時に、これを使用して初期化していますst[]が、request.getParameter("radio" + j);これは null になる可能性があります。のjavadocによるとgetParameter()

リクエスト パラメータの値を文字列として返すか、パラメータが存在しない場合は null を返します。

したがって、この次のコードを実行しようとすると:

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

st[i]実際にある可能性がありnullます。これは、コード内の の理由である可能性がありますNullPointerException

于 2012-08-22T07:36:28.637 に答える
0

あなたの回答は、あなたのリクエストと一緒に返送されません。質問のラジオ グループに値が選択されていない場合、そのラジオ グループは、フォーム送信後に処理する POST リクエストの一部にはなりません。

そのため、最初に Null ポインター例外が発生します。上記の例を実行することはできませんが、例の最後の比較行でエラーが発生していると想定しています。

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

更新
簡単な修正のために、評価された値を に切り替えるだけst[i].equals(ans[i])ですans[i].equals(st[i])。そうすれば、常に null に対して equals を実行して、正しいカウントを取得できます。

于 2012-08-22T07:35:20.493 に答える