2017-02-16 16 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) 

サーブレットを初めて使用していますが、エラーの修正やコンパイルを効率的に行う方法がありません。私はAmazon Web Services-Elastic Beanstalk、Postman、およびmavenの組み合わせを使用してHTTPエンドポイントを作成しています。だから、問題は二重です。このエラーが発生するのはなぜですか?そして、このコードをコンパイルして訂正する簡単な方法があります。私はcURLと呼ばれるツールについて聞いたことがありますが、私が今やっていることとどのように違うのかは分かりません。どんな助けもありがとう!

+1

あなたは[mcve];たとえば、これをローカルで実行しようとします。 jsonでコードを読み込んで、それをソートしてください。 **ローカル**マシンでのJSONの解析、並べ替えが完璧に機能することを110%確かめるまで、複雑さを増す他のすべてのことについては忘れてください。 – GhostCat

+0

stacktraceは例外がどこにあるかを示します。ご質問にお答えください –

+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を使用することができます。 NPEのために

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

:条件i > inArray.size()は常にfalseですので、配列がnullのまま、とsort()arr.length;にNPEを投げます。

+0

とにかく、NPEを修正することはできません。 –

+1

ループの外側でアレイを正しく初期化してNPEを修正しました。 – Aubin

関連する問題