2016-08-09 382 views
0

Dies ist ein Android Quiz App Code-Schnipsel, die die Frage aus der Textdatei laden. Ich möchte die Frage und Antwort nach jedem nächsten Klick mischen, also wie kann ich Zufallsfunktion implementieren? https://github.com/gitssk/quizfun/blob/master/src/ssk/quizfun/QuizFunActivity.javaRandomize Array von Fragen beim Lesen von Text-Datei 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

können Sie mit Collections.shuffle shuffle – Selvin

+0

können Sie mir ein Beispiel geben – user3578882

+0

'Collections.shuffle' auf einem' JSONArray'? Ist das überhaupt möglich? –

Antwort

0

ich zu veröffentlichen viel Code verzichten, weil ich glaube, Sie es auf eigene Faust versuchen sollte. Es ist wirklich nicht so schwer. Ich werde Ihnen jedoch einen Ansatz geben.

Sie haben quesList = quesObj.getJSONArray("Questions");. So ist quesList die Liste der Fragen, die ein JSONArray ist. Sie möchten das mischen. Genau dies tun:

  1. Erhalten Sie die Länge des quesList Array. Nennen wir es len.
  2. Erstellen Sie eine einfache ArrayList namens quesOrder mit Ganzzahlen 0 to len.

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

Einmal haben Sie die quesOrder Array. Tun Sie einfach Collections.shuffle(quesOrder);. Jetzt, wenn Sie Fragen von Ihrem quesList Array erhalten, erhalten Sie einfach den Index von quesOrder Liste. Und Sie werden eine randomisierte Auswahl haben. Stellen Sie es in einer Funktion für die Bequemlichkeit zusammen.