这是一个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
答案 0 :(得分:0)
我会避免发布很多代码,因为我认为你应该自己尝试。真的不是那么艰难。我会给你一个方法。
你有quesList = quesObj.getJSONArray("Questions");
。因此,quesList
是JSONArray
的问题列表。你想要洗牌。就这样做:
quesList
数组的长度。我们称之为len
。创建一个名为quesOrder
的简单arrayList,其中包含整数0 to len
。
List<Integer> quesOrder = new ArrayList<>();
for (int i = 0; i <= len; i++)
{
quesOrder.add(i);
}
获得quesOrder
数组后。只做Collections.shuffle(quesOrder);
。现在,当您从quesList
数组中获得问题时,只需从quesOrder
列表中获取索引即可。你将有一个随机选择。为方便起见,将它放在一个函数中。