从文本文件android中读取时随机化问题数组

时间:2016-08-09 15:33:38

标签: android arrays random arc4random

这是一个Android测验应用代码段,用于从文本文件加载问题。 我希望在每次下一次点击后将问题和答案洗牌,以便如何实现随机功能? https://github.com/gitssk/quizfun/blob/master/src/ssk/quizfun/QuizFunActivity.java

https://github.com/gitssk/quizfun/blob/master/res/raw/questions.txt

 private void loadQuestions() throws Exception {
        try {
        InputStream questions = this.getBaseContext().getResources()
                .openRawResource(R.raw.questions);
        bReader = new BufferedReader(new InputStreamReader(questions));
        StringBuilder quesString = new StringBuilder();
        String aJsonLine = null;
        while ((aJsonLine = bReader.readLine()) != null) {
            quesString.append(aJsonLine);
        }
        Log.d(this.getClass().toString(), quesString.toString());
        JSONObject quesObj = new JSONObject(quesString.toString());
        quesList = quesObj.getJSONArray("Questions");
        Log.d(this.getClass().getName(),
                "Num Questions " + quesList.length());
        } catch (Exception e){

        } finally {
            try {
                bReader.close();
            } catch (Exception e) {
                Log.e("", e.getMessage().toString(), e.getCause());
            }

        }


    }







https://github.com/gitssk/quizfun/blob/master/src/ssk/quizfun/QuizFunActivity.java

1 个答案:

答案 0 :(得分:0)

我会避免发布很多代码,因为我认为你应该自己尝试。真的不是那么艰难。我会给你一个方法。

你有quesList = quesObj.getJSONArray("Questions");。因此,quesListJSONArray的问题列表。你想要洗牌。就这样做:

  1. 获取quesList数组的长度。我们称之为len
  2. 创建一个名为quesOrder的简单arrayList,其中包含整数0 to len

    List<Integer> quesOrder = new ArrayList<>();
    for (int i = 0; i <= len; i++)
    {
     quesOrder.add(i);
    }
    
  3. 获得quesOrder数组后。只做Collections.shuffle(quesOrder);。现在,当您从quesList数组中获得问题时,只需从quesOrder列表中获取索引即可。你将有一个随机选择。为方便起见,将它放在一个函数中。