cari

Rumah  >  Soal Jawab  >  teks badan

java - Bagaimana untuk mengira purata dua data Array dengan lebih baik dalam format yang sama

Terdapat dua JSONArrays dengan format yang sama

Satu adalah data yang baru ditambah

saveArray: [{"name":"name1","value":10},{"name":"name2","value":12},...,{}]

Salah satunya ialah data purata

avgArray: [{"name":"name1","value":11},{"name":"name2","value":13},...,{}]

Ketahui nombor untuk mengira purata int num = 10;

Kemudian berdasarkan data baharu, selepas mengira purata, kemas kini rekod purata sedia ada:

Akhirnya dapat:

newAvgArray: [{"name":"name 1","value":(10 x 11 + 10)/11},{"name":"name 2","value":(13 x 10 +12) /11},...,{}]

Satu-satunya cara yang saya boleh fikirkan ialah:

for (int i = 0;i < avgArray.size();i++){
   avgObj = avgArray.get(i).get("value");
   addValue = saveArray.get(i).get("value");
   //然后计算新的值保存新的Array
}

Adakah cara yang lebih baik untuk mengira

巴扎黑巴扎黑2710 hari yang lalu780

membalas semua(2)saya akan balas

  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-23 09:15:23

    Tiada lagi.

    Secara algoritma, ini adalah yang paling mudah. O(n)

    balas
    0
  • 为情所困

    为情所困2017-06-23 09:15:23

        public static void getNewArrayAvg(JSONArray add,JSONArray avg,int num){
            JSONArray res = new JSONArray();
            int size = add.size();
            int range = avg.size();
            for (int i = 0; i < size; i++) {
                String key = add.getJSONObject(i).getString("name");
                double avgNum = add.getJSONObject(i).getDoubleValue("value")/(num+1.0);
                for (int j = 0; j < range; j++) {
                    if (key.equals(avg.getJSONObject(j).getString("name"))) {
                        avgNum += avg.getJSONObject(j).getDoubleValue("value") * (num/(num+1.0));
                        JSONObject tmp = new JSONObject();
                        tmp.put("name", key);
                        tmp.put("value", avgNum);
                        res.add(tmp);
                        break;
                    }
                }
            }
            res.toString();
        }

    Seharusnya ada master yang boleh menggunakan lambda untuk melakukan operasi sombong, tetapi setakat keperluan anda, anda hanya boleh mengambil nilai dan mengiranya semula, anda perlu menyemak soalan dengan lebih lanjut.
    Anda tidak boleh melakukan operasi berikut. Pastikan nilai nama boleh sepadan.

       avgObj = avgArray.get(i).get("value");
       addValue = saveArray.get(i).get("value");

    balas
    0
  • Batalbalas