2017-10-24 33 views
1

私はJSONArraysとJSONObjectsを使ってjavaの別のクラスから情報を取得しようとしていましたが、何らかの理由で非常に奇妙な結果が得られました。JSONArray奇妙な結果

私が持っている私のInfo.javaクラス:私は私のMain.javaクラスに

public JSONArray getSpawnedPets() { 
    JSONArray petsArray = new JSONArray(); 
    JSONObject petO = new JSONObject(); 
    boolean spawned = false; 
    for (int i = 0; i <= 3; i++) { 
     spawned = true; 
     if (spawned) { 
      petO.put("petID", i); 
      petO.put("petOwner", "owner"+i); 
      petO.put("petName", "name"); 
      petO.put("color", "s"); 
      petO.put("particle", "s"); 
      petsArray.add(petO); 
     } 
    } 
    return petsArray; 
} 

public class main { 
    public static void main(String[] args) { 
     JSONArray petsArray = new JSONArray(); 
     Info in = new Info(); 
     petsArray = In.getSpawnedPets(); 
     if (petsArray != null) { 
      for (int i = 0; i < petsArray.size(); i++) { 
       JSONObject po = (JSONObject) petsArray.get(i); 
       System.out.println("PetInfo:"); 
       System.out.println(po.get("petID")+":"); 
       System.out.println(""+po.get("petName")); 
       System.out.println(""+po.get("petOwner")); 
      } 
     } 
    } 
} 

結果が増加することになったが、まだ私はこれを取得した。

PetInfo: 
3: 
name 
owner3 
PetInfo: 
3: 
name 
owner3 
PetInfo: 
3: 
name 
owner3 
PetInfo: 
3: 
name 
owner3 

私は間違っていましたか?私は私の問題を見つけることができません、同じコードが、クラスの作品を使用していないが、私はそれのためのクラスを使用する必要があります。

乾杯。

答えて

3

一方のみがループの各反復で更新されているJSONObject JSONObject petO = new JSONObject();あり、そうでない場合はすべての反復でjsonobjectを作成

JSONArray petsArray = new JSONArray(); 
JSONObject petO; 
    //boolean spawned = false; // no need of it 
    for (int i = 0; i <= 3; i++) { 
     //spawned = true; 
     //if (spawned) { // no need of it , has no effect, always true 
      petO = new JSONObject(); 
      // ^^^^^^^^^^^^^^^^^ 
      petO.put("petID", i); 
      petO.put("petOwner", "owner"+i); 
      petO.put("petName", "name"); 
      petO.put("color", "s"); 
      petO.put("particle", "s"); 
      petsArray.add(petO); 
     //} 
    } 

注:spawnedローカル変数であり、最初の反復でtrueに設定されるのでコードには何の効果もありませんので、必要はありません。if

+0

まず最初に、簡単な質問に答えるには雷鳴よりも速くなければなりません。 – Vlasec

+0

ああ!さて、本当にありがとう! そして、ifについては、ファイルから取得するためですが、ここに貼り付けて理解することをお勧めします。少し簡素化することにしました。 – Matthew

+0

私は幸せなコーディングと@Vlasecを助けることができてうれしいです。私はちょうど私の夕食を少し増強しました:)そしてあなたが試みることができるのは、最初に主要な説明であなたの答えを投稿し、 –