java - 如何在android中使用json数组限制问题的长度?

标签 java android limit

嘿伙计们,我正在开发一个测验,其中存储了 50 个问题,然后我希望只显示 10 个问题..问题是随机显示的..但我的问题是应该在测验中显示 10 个问题.请帮助我...非常感谢您的帮助..

public class Question1 extends Activity {



Intent menu = null;
BufferedReader bReader = null;
static JSONArray quesList = null;
static int index = 50;



/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.question10);

    Thread thread = new Thread() {
        public void run() {
            try {
                Thread.sleep(1 * 1000);
                finish();
                loadQuestions();
                Intent intent = new Intent(Question1.this,
                        Question2.class);
                Question1.this.startActivity(intent);
            } catch (Exception e) {
            }
        }
    };
    thread.start();

}

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());
        }

    }

}

public static JSONArray getQuesList()throws JSONException{

      Random rnd = new Random();

        for (int i = quesList.length() - 1; i >= 0; i--)
        {
          int j = rnd.nextInt(i + 1);
          // Simple swap
          Object object = quesList.get(j);
          quesList.put(j, quesList.get(i));
          quesList.put(i, object);
        }
        return quesList;


}

最佳答案

由于您希望每个测验都有动态的 10 个问题,您可以使用 Collections.shuffle(YourList) 来打乱 ArrayList并从该随机列表中取出前 10 个。

但是,当您拥有 JSONArray 时,您必须迭代它并准备 ArrayList,这样您就可以使用 shuffle() .

更新:

引用ogzd的回答,这样你就会有问题作为List<JsonObject> ,现在你只需调用我上面提到的 shuffle 方法:

Collections.shuffle(questions);

现在,它会打乱问题列表,因此您必须从中复制或取出前 10 项。

关于java - 如何在android中使用json数组限制问题的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15018917/

相关文章:

java - 我可以只使用 Batik 库的转码器而不使用所有其他 Batik 代码和依赖项吗?

java - 限制类属性大小

java - 在 OSX 上启动 JavaFX 应用程序需要什么特别的东西吗?

java - 将 XML 转换为嵌套 map 的 Map

php - MySql 查询限制显示少一个元素

android - android中的opengl es透明雾

Android访问其他应用方法?

android - 使用 Facebook Android SDK(API key )

sql - 有没有办法在 SQL> 中应用移动限制

windows - 如何限制批处理变量的长度