java - 如何从此字符串中随机生成五个选择?

标签 java arrays string random

这是代码 -

import java.util.Scanner;
public class assn9 {


    public static void main(String[] args){
        String[][] stateCapital = {
                { "Alabama", "Montgomery" },
                { "Alaska", "Juneau" },
                { "Arizona", "Phoenix" },
                { "Arkansas", "Little Rock" },
                { "California", "Sacramento" },
                { "Colorado", "Denver" },
                { "Connecticut", "Hartford" },
                { "Delaware", "Dover" },
                { "Florida", "Tallahassee" },
                { "Georgia", "Atlanta" },
                { "Hawaii", "Honolulu" },
                { "Idaho", "Boise" },
                { "Illinois", "Springfield" },
                { "Indiana", "Indianapolis" },
                { "Iowa", "Des Moines" },
                { "Kansas", "Topeka" },
                { "Kentucky", "Frankfort" },
                { "Louisiana", "Baton Rouge" },
                { "Maine", "Augusta" },
                { "Maryland", "Annapolis" },
                { "Massachusettes", "Boston" },
                { "Michigan", "Lansing" },
                { "Minnesota", "Saint Paul" },
                { "Mississippi", "Jackson" },
                { "Missouri", "Jefferson City" },
                { "Montana", "Helena" },
                { "Nebraska", "Lincoln" },
                { "Nevada", "Carson City" },
                { "New Hampshire", "Concord" },
                { "New Jersey", "Trenton" },
                { "New York", "Albany" },
                { "New Mexico", "Santa Fe" },
                { "North Carolina", "Raleigh" },
                { "North Dakota", "Bismark" },
                { "Ohio", "Columbus" },
                { "Oklahoma", "Oklahoma City" },
                { "Oregon", "Salem" },
                { "Pennslyvania", "Harrisburg" },
                { "Rhode Island", "Providence" },
                { "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++)
                {
                System.out.println("What is the capital of " + stateCapital[i][0] + "?");
                Scanner input = new Scanner(System.in);
                String capital = input.next();


                if (capital.equalsIgnoreCase(stateCapital[i][1])) {
                    correctCount++;
                    System.out.println("Your answer is correct, the correct count is " + correctCount);

                }
                else {

                    System.out.println("The correct answer should be " + stateCapital[i][1] + " and the correct count is " + correctCount);
                }
                }

                }
                }

因此,我不想让控制台按照我在字符串中输入的顺序询问每个大写字母是什么,而是想随机化询问它们的顺序,并且我想将每次运行限制为五个问题。我对这个有点迷失了。谢谢。

最佳答案

你可以声明一个List来存储stateCapital的索引。并调用Collections.shuffle方法随机生成indexList。

然后你可以循环indexList来显示问题。这很简单。您只需进行以下 2 个微小更改。

  1. 添加以下代码:在循环问题之前。

    List<Integer> indexList = new ArrayList<Integer>();
    for(int idx =0; idx <  stateCapital.length; idx++)
    {
        indexList.add(idx);
    }
    Collections.shuffle(indexList);
    
  2. 对 for 循环进行一些更改。

来自

 for (int i = 0; i < stateCapital.length; i++)

 for(int i : indexList)

如果您只需要 5 个问题,那么您可以使用以下代码

 for(int i : indexList.subList(0, 5))

然后所有问题将随机显示,无需更改其他代码。

完整代码如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class assn9 {

public static void main(String[] args) {
    String[][] stateCapital = { { "Alabama", "Montgomery" },
            { "Alaska", "Juneau" }, { "Arizona", "Phoenix" },
            { "Arkansas", "Little Rock" }, { "California", "Sacramento" },
            { "Colorado", "Denver" }, { "Connecticut", "Hartford" },
            { "Delaware", "Dover" }, { "Florida", "Tallahassee" },
            { "Georgia", "Atlanta" }, { "Hawaii", "Honolulu" },
            { "Idaho", "Boise" }, { "Illinois", "Springfield" },
            { "Indiana", "Indianapolis" }, { "Iowa", "Des Moines" },
            { "Kansas", "Topeka" }, { "Kentucky", "Frankfort" },
            { "Louisiana", "Baton Rouge" }, { "Maine", "Augusta" },
            { "Maryland", "Annapolis" }, { "Massachusettes", "Boston" },
            { "Michigan", "Lansing" }, { "Minnesota", "Saint Paul" },
            { "Mississippi", "Jackson" }, { "Missouri", "Jefferson City" },
            { "Montana", "Helena" }, { "Nebraska", "Lincoln" },
            { "Nevada", "Carson City" }, { "New Hampshire", "Concord" },
            { "New Jersey", "Trenton" }, { "New York", "Albany" },
            { "New Mexico", "Santa Fe" }, { "North Carolina", "Raleigh" },
            { "North Dakota", "Bismark" }, { "Ohio", "Columbus" },
            { "Oklahoma", "Oklahoma City" }, { "Oregon", "Salem" },
            { "Pennslyvania", "Harrisburg" },
            { "Rhode Island", "Providence" },
            { "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" } };


    List<Integer> indexList = new ArrayList<Integer>();
    for(int idx =0; idx <  stateCapital.length; idx++)
    {
        indexList.add(idx);
    }
    Collections.shuffle(indexList);

    int correctCount = 0;

    //for (int i = 0; i < indexList.size(); i++) {
    for(int i : indexList){
        System.out.println("What is the capital of " + stateCapital[i][0]
                + "?");
        Scanner input = new Scanner(System.in);
        String capital = input.next();

        if (capital.equalsIgnoreCase(stateCapital[i][1])) {
            correctCount++;
            System.out
                    .println("Your answer is correct, the correct count is "
                            + correctCount);

        } else {

            System.out.println("The correct answer should be "
                    + stateCapital[i][1] + " and the correct count is "
                    + correctCount);
        }
    }

}
}

关于java - 如何从此字符串中随机生成五个选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19850780/

相关文章:

java - 使用前导空格打印来自扫描仪的字符串输入

c - 在 C 中使用指针扫描字符串

java - 为什么使用两个线程作为计数器会降低 Java 的性能?

java - 如何在显示 ProgressIndicator 的同时打印节点?

java - 在使用流 API 的 Java 8 中,如何从需要多次计算的 Map 返回实例

java - 使用可选的空检查

c# - 从字符串数组创建更大的字符串

python - 在 python/numpy 中拼接数组

c++ - C++数组结构的误解

python - 连接列表的元素对