How to guarantee one of the multiple choice answers is correct in android?

759 views Asked by At

I'm trying to create a multiple choice math question. I have managed to create 4 random answers, but I'm not sure how to put in the correct answer. It has to be either option1,2,3, or 4, and it should be random.

My java code:

public class MainActivity extends AppCompatActivity{
private boolean correct;
private String questionTxt, option1String, option2String, option3String, option4String;
private int answer;
TextView option1Text, option2Text, option3Text, option4Text;
int r = (int) (Math.random() * (4 - 1)) + 1;

public void correctAnswer()
{
    int first = (int)(Math.random() * 10);
    int second = (int)(Math.random() * 10);
    answer = first + second;
    questionTxt = first + " + " + second + " = ?";
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

    /*ImageView rocketImage = (ImageView) findViewById(R.id.img_animation);
    rocketImage.setBackgroundResource(R.drawable.greencartooncar);
    rocketAnimation = (AnimationDrawable) rocketImage.getBackground();*/
    TextView questionText = (TextView)findViewById(R.id.question);
    correctAnswer();
    questionText.setText(questionTxt + "");
    option1Text = (TextView)findViewById(R.id.option1);
    option1Text.setText(wrongAnswer() + "");
    option2Text = (TextView)findViewById(R.id.option2);
    option2Text.setText(wrongAnswer() + "");
    option3Text = (TextView)findViewById(R.id.option3);
    option3Text.setText(wrongAnswer() + "");
    option4Text = (TextView)findViewById(R.id.option4);
    option4Text.setText(wrongAnswer() + "");
    setString();
    if (option1String.equals(option2String)||option1String.equals(option3String)||option1String.equals(option4String)
            ||option2String.equals(option3String)||option2String.equals(option4String)||option3String.equals(option4String))
    {
        noSameAnswer();
    }
}

public int wrongAnswer()
{
    return (int)(Math.random() * 10 + Math.random() * 10);
}

public void onClick3(View v) {
    if (option3String.equals(Integer.toString(answer))) {
        TextView questionText = (TextView) findViewById(R.id.question);
        correctAnswer();
        questionText.setText(questionTxt + "");
        option1Text = (TextView)findViewById(R.id.option1);
        option1Text.setText(wrongAnswer() + "");
        option2Text = (TextView)findViewById(R.id.option2);
        option2Text.setText(wrongAnswer() + "");
        option3Text = (TextView)findViewById(R.id.option3);
        option3Text.setText(wrongAnswer() + "");
        option4Text = (TextView)findViewById(R.id.option4);
        option4Text.setText(wrongAnswer() + "");
        setString();
        noSameAnswer();
    }
}

public void onClick1(View v) {
    if (option1String.equals(Integer.toString(answer))) {
        TextView questionText = (TextView) findViewById(R.id.question);
        correctAnswer();
        questionText.setText(questionTxt + "");
        option1Text = (TextView)findViewById(R.id.option1);
        option1Text.setText(wrongAnswer() + "");
        option2Text = (TextView)findViewById(R.id.option2);
        option2Text.setText(wrongAnswer() + "");
        option3Text = (TextView)findViewById(R.id.option3);
        option3Text.setText(wrongAnswer() + "");
        option4Text = (TextView)findViewById(R.id.option4);
        option4Text.setText(wrongAnswer() + "");
        setString();
        noSameAnswer();
    }
}

public void onClick2(View v) {
    if (option2String.equals(Integer.toString(answer))) {
        TextView questionText = (TextView) findViewById(R.id.question);
        correctAnswer();
        questionText.setText(questionTxt + "");
        option1Text = (TextView)findViewById(R.id.option1);
        option1Text.setText(wrongAnswer() + "");
        option2Text = (TextView)findViewById(R.id.option2);
        option2Text.setText(wrongAnswer() + "");
        option3Text = (TextView)findViewById(R.id.option3);
        option3Text.setText(wrongAnswer() + "");
        option4Text = (TextView)findViewById(R.id.option4);
        option4Text.setText(wrongAnswer() + "");
        setString();
        noSameAnswer();
    }
}

public void onClick4(View v) {
    if (option4String.equals(Integer.toString(answer))) {
        TextView questionText = (TextView) findViewById(R.id.question);
        correctAnswer();
        questionText.setText(questionTxt + "");
        option1Text = (TextView)findViewById(R.id.option1);
        option1Text.setText(wrongAnswer() + "");
        option2Text = (TextView)findViewById(R.id.option2);
        option2Text.setText(wrongAnswer() + "");
        option3Text = (TextView)findViewById(R.id.option3);
        option3Text.setText(wrongAnswer() + "");
        option4Text = (TextView)findViewById(R.id.option4);
        option4Text.setText(wrongAnswer() + "");
        setString();
        noSameAnswer();
    }
}
}

Some of the unneeded methods are cut out. The int r field is a random number from 1 to 4, but I don't know how to use that to make the correctanswer go to option 1,2,3, or 4. I want the correctanswer to be set as option(randomnumber)Text.

2

There are 2 answers

2
keshav On BEST ANSWER

If I got ur question right, u want to place the right ans randomly at some option.

You can use following method which will do the same.

private String[] makeOptions(int correctAns) {

        String [] ansStrins = new String[4];
//        for (int i=0;i<ansStrins.length;i++){
//            System.out.println("Option "+i+ ": "+ansStrins[i]);
//
//        }
        int randomPos = (new Random().nextInt())%4;
        ansStrins[randomPos]=correctAns+"";
        for (int i=0;i<4;i++){
            int randomAns = (int)(Math.random() * 10 + Math.random() * 10);
           if(ansStrins[i]==null){
               ansStrins[i]=randomAns+"";
           }
        }
        return ansStrins;
    }

Now use that array of options.

1
Rajan Kali On
     private int fetchCorrectAnswer() {
            int correctAnswer = 4;
            int option = new Random().nextInt(2); // outputs either 0 or 1
            //if option is 1 which is randomly genereted, correctAnswer will be 4. 
            //if option is 0,then correctAnswer will be wither 1 or 2 or 3 which is also randomly generated
            if(option == 0){
              //if 0, then it should be between 1/2/3 i.e min = 1, max = 3
              correctAnswer = (new Random().nextInt(max - min + 1)) + 1; // +1 because 0-2 as 1-3
            }
            return correctAnswer;
     }