2017-02-16 52 views
0
public class ReverseList extends HttpServlet { 

    public static void sort(int arr[]) { 
     int N = arr.length; 
     int i, j, temp; 
     for (i = 1; i< N; i++) { 
      j = i; 
      temp = arr[i]; 
      while (j > 0 && temp < arr[j-1]) { 
       arr[j] = arr[j-1]; 
       j = j-1; 
      } 
      arr[j] = temp; 
     } 
    } 

    private void doService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream())); 
     String jsonStr = ""; 
     if(br != null){ 
      jsonStr = br.readLine(); 
     } 
     StringReader strReader = new StringReader(jsonStr); 
     JsonReader reader = Json.createReader(strReader); 
     JsonObject obj = reader.readObject(); 
     JsonArray inArray = obj.getJsonArray("inList"); 
     int data []; 
     for (int i = 0; i > inArray.size(); i++) { 
     data = new int[inArray.getInt(i)]; 
     } 
     long startTime = System.currentTimeMillis(); 
     this.sort(data); 
     long stopTime = System.currentTimeMillis(); 
     long elapsedTime = stopTime - startTime; 
     JsonArrayBuilder outArrayBuilder = Json.createArrayBuilder(); 
     for(int i = 0; i<data.length; i++) { 
     outArrayBuilder.add(data[i]); 
     } 
     response.setContentType("application/json"); 
     PrintWriter out = response.getWriter(); 
     out.println("{ \"outList\" : " + outArrayBuilder.build().toString()+"\n"); 
     out.println("algorithim: Insertion Sort\n Execution time:"+ elapsedTime+"}"); 
    } 
} 

我試圖JSON數組轉換成一個int [],排序INT [],然後隨着時間的輸出爲JSON它採取了排序來執行。我收到的錯誤是一個NullPointerException。有麻煩使用插入排序與JSON

java.lang.NullPointerException 
csi403.ReverseList.sort(ReverseList.java:23) 
csi403.ReverseList.doService(ReverseList.java:99) 
csi403.ReverseList.doPost(ReverseList.java:44) 

這是我第一次使用servlet,我沒有一個有效的方法來糾正和編譯錯誤。我正在使用亞馬遜網絡服務(Elastic Beanstalk,Postman和Maven)的組合來創建HTTP端點。所以,這個問題是雙重的。爲什麼我會遇到這個錯誤?而且,是否有更簡單的方法來編譯此代碼並進行更正。我聽說過一種名爲cURL的工具,但我不確定它與我現在所做的有什麼不同。任何幫助表示讚賞!

+1

你首先搭建一個[mcve];例如:您嘗試在本地運行所有這些...確保你的代碼能夠讀取json,並對其進行排序。忘記所有其他增加複雜性的事情,直到您確信在您的**本地**機器上JSON解析,排序完美無缺。 – GhostCat

+0

您的堆棧跟蹤會告訴您異常的位置。請在您的問題中提供 –

+0

謝謝您的建議。你能推薦我使用的任何資源來學習如何在本地機器上設置一切嗎?我會做更多與此相似的作業。而你的建議似乎是對我的問題的完美解決方案。 –

回答

1

您創建和填充您的陣列之前排序可能是附近的方式:

int[] data = new int[inArray.size()]; 
for(int i = 0; i < inArray.size(); i++) { 
    data[i] = inArray.getInt(i); 
} 

要排序的數組,你可以使用java.util.Arrays.sort

Arrays.sort(data, Collections.reverseOrder()); 

對於NPE:條件i > inArray.size()永遠是假的,所以陣列保持爲空,而在sort()arr.length;拋出NPE。

+0

不管怎樣,雖然 –

+1

NPE可能沒有修復NPE,但是通過在環路外正確初始化陣列來修復NPE。 – Aubin