Below are the 2 methods which I am using to generate a random number from a range of numbers.This is part of a small maths quiz. The number of questions can go upto 50 questions. The only clause is the numbers should be non repeated i.e 5x6 if is present in the list I cant have 6x5 in the list.
The problem that I am facing is the below code throws stackoverflow error.I have tried to run it in a separate thread but I am unable to get it working.
The for loop used inside the first method is the one I use to check if the number is already present.
public QuestionsV1 generateQuestionsArray(int level, int range) {
generateRandomNumbers(level, range);
for (QuestionsV1 questions : questionsList) {
if (questionsList != null && ((first_number == questions.getFirst_number() && second_number == questions.getSecond_number())
|| (first_number == questions.getSecond_number() &&
second_number == questions.getFirst_number()))) {
generateQuestionsArray(level, range);
break;
}
}
Log.d("ArrayList---", first_number + " " + second_number);
QuestionsV1 questions = new QuestionsV1();
questions.setFirst_number(first_number);
questions.setSecond_number(second_number);
questions.setOperator("x");
questions.setCorrect_answer(first_number * second_number);
return questions;
}
public void generateRandomNumbers(int level, int range) {
Random rand1 = new Random();
Random rand2 = new Random();
if (range == 0) {
first_number = rand1.nextInt(3 - 1 + 1) + 1;
} else if (range == 1) {
first_number = rand1.nextInt(6 - 4 + 1) + 4;
} else if (range == 2) {
first_number = rand1.nextInt(10 - 7 + 1) + 7;
}
switch (level) {
case 1:
second_number = rand2.nextInt(6 - 2 + 1) + 2;
break;
case 2:
second_number = rand2.nextInt(12 - 7 + 1) + 7;
break;
case 3:
second_number = rand2.nextInt(20 - 13 + 1) + 13;
break;
}
below is the error which I am getting.
Fatal Exception: java.lang.StackOverflowError: stack size 2MB
at java.util.concurrent.atomic.AtomicLong.<init>(AtomicLong.java:61)
at java.util.Random.<init>(Random.java:137)
at java.util.Random.<init>(Random.java:105)
at com.leapscale.scimat.t4e.Builders.Multiply.generateRandomNumbers(Multiply.java:80)
at com.leapscale.scimat.t4e.Builders.Multiply.generateRandomNumbers(Multiply.java:106)
at com.leapscale.scimat.t4e.Builders.Multiply.generateRandomNumbers(Multiply.java:106)
at com.leapscale.scimat.t4e.Builders.Multiply.generateRandomNumbers(Multiply.java:106)
at com.leapscale.scimat.t4e.Builders.Multiply.generateRandomNumbers(Multiply.java:106)
at com.leapscale.scimat.t4e.Builders.Multiply.generateRandomNumbers(Multiply.java:106)
at com.leapscale.scimat.t4e.Builders.Multiply.generateRandomNumbers(Multiply.java:106)
at com.leapscale.scimat.t4e.Builders.Multiply.generateRandomNumbers(Multiply.java:106)
at com.leapscale.scimat.t4e.Builders.Multiply.generateRandomNumbers(Multiply.java:106)
at com.leapscale.scimat.t4e.Builders.Multiply.generateRandomNumbers(Multiply.java:106)
at com.leapscale.scimat.t4e.Builders.Multiply.generateRandomNumbers(Multiply.java:106)
at com.leapscale.scimat.t4e.Builders.Multiply.generateQuestionsArray(Multiply.java:39)
at com.leapscale.scimat.t4e.Builders.Multiply.generateRandomNumbersHard(Multiply.java:74)
at com.leapscale.scimat.t4e.Builders.Multiply.calculateNoOfQuestionsForLevels(Multiply.java:141)
at com.leapscale.scimat.t4e.Builders.Multiply.getList(Multiply.java:146)
at com.leapscale.scimat.t4e.Levels.Levels_Fragment$QuestionBuilder$1.run(Levels_Fragment.java:185)
at java.lang.Thread.run(Thread.java:761)
Aucun commentaire:
Enregistrer un commentaire