Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

{\"South Carolina\", \"Columbia\"}, {\"South Dakota\", \"Pierre\"}, {\"Tennessee

ID: 3641498 • Letter: #

Question

{"South Carolina", "Columbia"},
{"South Dakota", "Pierre"},
{"Tennessee", "Nashville"},
{"Texas", "Austin"},
{"Utah", "Salt Lake City"},
{"Vermont", "Montpelier"},
{"Virginia", "Richmond"},
{"Washington", "Olympia"},
{"West Virginia", "Charleston"},
{"Wisconsin", "Madison"},
{"Wyoming", "Cheyenne"}
};

int correctCount = 0;

for (int i = 0; i < stateCapital.length; i++) {
// Prompt the user with a question
String capital =
JOptionPane.showInputDialog("What is the capital of " +
stateCapital[i][0] + "?");

if (capital.equals(stateCapital[i][1])) {
JOptionPane.showMessageDialog(null, "Your answer is correct");
correctCount++;
}
else
JOptionPane.showMessageDialog(null,
"The correct answer should be " + stateCapital[i][1]);
}

JOptionPane.showMessageDialog(null,
"The correct count is " + correctCount);
}
}

**The above code is correct, but I need to make it to where the questions are randomly displayed. Please assist!

Explanation / Answer

import java.util.ArrayList;
import java.util.Random;
import javax.swing.JOptionPane;

public class GuessStateCapital {
  
    public static void main(String[] args) {
        String[][] stateCapital = {
            {"Texas", "Austin"},
            {"Utah", "Salt Lake City"},
            {"Vermont", "Montpelier"},
            {"Virginia", "Richmond"},
            {"Washington", "Olympia"},
            {"West Virginia", "Charleston"},
            {"Wisconsin", "Madison"},
            {"Wyoming", "Cheyenne"}
        };
        int correctCount = 0;
        int questCount = stateCapital.length;
        ArrayList questIndex = new ArrayList();
        Random generator = new Random();
    
        for (int i = 0; i < questCount; i++) { //initialize questIndex list
            questIndex.add(i);
        }
    
        while (questCount > 0) {
            int randomIndex = generator.nextInt(questCount);
            int i = Integer.parseInt(
                    questIndex.remove(randomIndex).toString()); //pop out the randomIndex from questIndex list. Since questCount always equals to the remaining questIndexes you don't have to worry the out of bound error.
          
            // Prompt the user with a question
            String capital =
            JOptionPane.showInputDialog("What is the capital of " +
            stateCapital[i][0] + "?");

            if (capital.equals(stateCapital[i][1])) {
                JOptionPane.showMessageDialog(null, "Your answer is correct");
                correctCount++;
            }
            else {
                JOptionPane.showMessageDialog(null,
                "The correct answer should be " + stateCapital[i][1]);
            }

            JOptionPane.showMessageDialog(null,
            "The correct count is " + correctCount);
          
            questCount--; //decrement questCount after asking
        }
      
        JOptionPane.showMessageDialog(null,
            "You get " + correctCount + " correct answer"
                + (correctCount != 1 ? "(s)" : "") + " out of "
                + stateCapital.length + " questions");
    }
}