2012-08-22 36 views
-4

我正在項目上在線考試在Java中。 我正面臨一個問題。我得到錯誤500和空指針異常

在啓動的基礎上,我有15個問題在我的數據庫中,我按順序提取那些。 問題是,如果我嘗試所有的答案,我會得到結果,否則我得到error 500NullPointerException。這些問題是多種選擇。每個問題都有四個選項。如果我不嘗試所有的問題,那麼我會得到上述錯誤。

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

你可以顯示一些代碼? – Tudor

+0

你的意思是如果你不嘗試所有的問題,那麼你會得到錯誤? – Cdeez

+0

是的我的意思是說, – Harsh

回答

0

我會說你的答案根本不會提交回你的請求。如果問題的廣播組沒有選定的值,那麼該廣播組將不會成爲您在表單提交後處理的POST請求的一部分。

這就是爲什麼你首先得到空指針異常的原因。 我不能RUNT你上面的例子,但我認爲錯誤在比較線在你的榜樣年底發生的事情:

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

更新
快速修復,只需切換評價值: st[i].equals(ans[i])ans[i].equals(st[i])。這樣,你總是可以對null執行一個等於並獲得正確的計數。

+0

永遠不要編寫假設某些參數將會或不會被包含在客戶端的邏輯。相反,在服務器上處理Null場景。 – pap

+0

@pap你是對的。我只想簡單地解決這個問題,這已經是一團糟了,這並沒有什麼幫助。 – ljubomir

0

在您的代碼開始時,您正在使用request.getParameter("radio" + j);初始化您的st[]這可能會爲空。具體根據javadocgetParameter()

返回一個請求參數爲字符串,或者如果 參數不存在空的值。

所以,當您嘗試執行此下面這段代碼:

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

有一個機會,st[i]其實null。這可能可能是爲NullPointerException原因在你的代碼

0

你應該嘗試捕捉被封閉你的邏輯,並在最後處理SQL異常連接,RS(在單獨的try catch塊) 另外,儘量lloking在堆棧跟蹤,至於哪一行給出空指針異常