private void populateResponses() throws SurveyException { Interpreter interpreter = new Interpreter(survey); do { Question q = interpreter.getNextQuestion(); SurveyDatum[] c = q.getOptListByIndex(); List<SurveyDatum> answers = new ArrayList<>(); // calculate our answer if (q.freetext) { answers.add(new StringDatum(generateStringComponent(q), -1, -1)); } else { int denom = getDenominator(q); double prob = rng.nextDouble(); double cumulativeProb = 0.0; for (int j = 0; j < denom; j++) { assert posPref.get(q).length == denom : String.format( "Expected position preference question options and denom to be equal (%d = %d)", posPref.get(q).length, denom); cumulativeProb += posPref.get(q)[j]; if (prob < cumulativeProb) { answers.addAll(selectOptions(j, c)); break; } } } interpreter.answer(q, answers); } while (!interpreter.terminated()); this.response = interpreter.getResponse(); this.response.setKnownValidityStatus(KnownValidityStatus.NO); }