2016-08-09 3 views
0

Это фрагмент кода приложения для андроид-викторины, который загружает вопрос из текстового файла. Я хочу перетасовать вопрос и ответ после каждого следующего щелчка, так как я могу реализовать случайную функцию? https://github.com/gitssk/quizfun/blob/master/src/ssk/quizfun/QuizFunActivity.javaРандомизировать массив вопросов во время чтения из текстового файла android

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

oviosuly вы можете перемешать с помощью Collections.shuffle – Selvin

+0

можете ли вы привести мне пример – user3578882

+0

'Collections.shuffle' на' JSONArray'? Возможно ли это? –

ответ

0

Я воздержусь от размещения большого количества кода, потому что я думаю, вы должны попытаться сделать это самостоятельно. Это серьезно не так сложно. Однако я дам вам подход.

У вас есть quesList = quesObj.getJSONArray("Questions");. Таким образом, quesList - это список вопросов, который является JSONArray. Вы хотите перетасовать это. Только сделайте так:

  1. Получить длину массива quesList. Назовем это len.
  2. Создайте простой массивList с именем quesOrder, содержащий целые числа 0 to len.

    List<Integer> quesOrder = new ArrayList<>(); 
    for (int i = 0; i <= len; i++) 
    { 
    quesOrder.add(i); 
    } 
    

После того как вы quesOrder массив. Просто сделайте Collections.shuffle(quesOrder);. Теперь, когда вы получаете вопросы от своего массива quesList, просто получите индекс от quesOrder. И у вас будет рандомизированный отбор. Поместите его в функцию для удобства.

Смежные вопросы