为什么不洗牌第二阵列

时间:2017-04-20 12:36:56

标签: java

我有两个JSON阵列,我正在梳理它们以获得一个Shuffle数组。

这是我的程序

import java.util.Random;

import org.json.JSONArray;
import org.json.JSONException;

public class Snippet {
    public static void main(String[] args) throws JSONException {
        String weekArray = "[\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"] ";
        String numberArray = "[\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"] ";
        JSONArray allArray = new JSONArray(weekArray).put(numberArray);
        JSONArray shuffledArray = shuffleJsonArray(allArray);
        System.out.println(shuffledArray);
    }
    public static JSONArray shuffleJsonArray (JSONArray array) throws JSONException {
        // Implementing Fisher–Yates shuffle
            Random rnd = new Random();
            for (int i = array.length() - 1; i >= 0; i--)
            {
              int j = rnd.nextInt(i + 1);
              // Simple swap
              Object object = array.get(j);
              array.put(j, array.get(i));
              array.put(i, object);
            }
        return array;
    }

}

当我运行上述程序时,输出为

["Saturday","Tuesday","Monday","Friday","[\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"] ","Thursday","Sunday","Wednesday"]

请告诉我为什么它不会改组第二阵列?

2 个答案:

答案 0 :(得分:1)

第二个数组在第一个数组内。您的改组算法仅更改第一个数组中元素的顺序,以便更改第一个数组中第二个数组的位置。这不会影响第二个数组内部元素的顺序。

此外,第二个数组实际上被视为String,因此在运行JSONArray之前,您需要将其转换为shuffleJsonArray实例。

答案 1 :(得分:0)

您的第二个数组 没有作为数组分配给第一个数组它&#39 ; s只作为一个 String 分配给第一个数组。所以你的shuffle方法( shuffleJsonArray )只改变那个String的索引(位置)(因为第一个数组)它只是一个String而不是一个数组)