繁体   English   中英

改组2D数组,同时将列元素保持在一起

[英]Shuffling a 2d array while keeping columns elements together

因此,我正在为一个类进行此分配,而我一辈子都无法弄清楚如何使用Collections.shuffle()方法对由状态及其大写字母组成的数组进行混排。 现在,当我对数组进行混洗时,它将对所有内容进行混洗。 我需要它来洗净一切,而且还必须使国家与首都之间的关系保持在一起。 (即

[阿拉巴马州] [蒙哥马利] [阿拉斯加] [朱诺] ...

不应该变成这样的东西

[阿拉巴马州] [阿拉斯加],[朱诺] [蒙哥马利],...

要么

[阿拉斯加] [蒙哥马利],[朱诺] [阿拉巴马州],...

有什么我想念的吗? 这是到目前为止的工作代码...

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 
import java.util.Random;
/** 
* @author mstashev 
* 
* Rewrite Programming Exercise 8.37 to store the pairs of states and 
* capitals so that the questions are displayed randomly. 
* 
* Exercise 8.37 
* 
* Write a program that repeatedly prompts the user to enter a capital 
* for a state. Upon receiving the user input, the program reports 
* whether the answer is correct. Assume that 50 states and their 
* capitals are stored in a 2D array. The program prompts the user to 
* answer all state's capitals and displays the total correct count. The 
* user's answer is not case-sensitive. 
*/ 
public class RandomStateCapitalQuestionnaire {
/**
 * 
 */
public static void main(String[] args) {
    // create a 2D array storing all 50 states and capitals
    String[][] twoDStatesAndCapitals = {
            { "Alabama", "Alaska", "Arizona", "Arkansas", "California",
                    "Colorado", "Connecticut", "Delaware", "Florida",
                    "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana",
                    "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine",
                    "Maryland", "Massachusetts", "Michigan", "Minnesota",
                    "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada",
                    "New Hampshire", "New Jersey", "New Mexico", "New York",
                    "North Carolina", "North Dakota", "Ohio", "Oklahoma",
                    "Oregon", "Pennsylvania", "Rhode Island", "South Carolina",
                    "South Dakota", "Tennessee", "Texas", "Utah", "Vermont",
                    "Virginia", "Washington", "West Virginia", "Wisconsin",
                    "Wyoming" },
            { "Montgomery", "Juneau", "Phoenix", "Little Rock", "Sacramento",
                    "Denver", "Hartford", "Dover", "Tallahassee", "Atlanta",
                    "Honolulu", "Boise", "Springfield", "Indianapolis",
                    "Des Moines", "Topeka", "Frankfort", "Baton Rouge",
                    "Augusta", "Annapolis", "Boston", "Lansing", "St. Paul",
                    "Jackson", "Jefferson City", "Helena", "Lincoln",
                    "Carson City", "Concord", "Trenton", "Santa Fe", "Albany",
                    "Raleigh", "Bismark", "Columbus", "Oklahoma City", "Salem",
                    "Harrisburg", "Providence", "Columbia", "Pierre",
                    "Nashville", "Austin", "Salt Lake City", "Montpelier",
                    "Richmond", "Olympia", "Charleston", "Madison", "Cheyenne" }            
        };//End of 2D array
    Random rnd = new Random();

    System.out.println(Arrays.deepToString(twoDStatesAndCapitals));


    List<List<String>> statesAndCapitals = twoDArrayToList(twoDStatesAndCapitals);
    Collections.shuffle(statesAndCapitals, rnd);


    System.out.println(statesAndCapitals);

    /*
     i = 0;
    for (i = 0; i < NUMBER_OF_US_STATES; i++) {
        System.out.println("Enter the Capital of the State listed: " + statesAndCapitals[i][0]);
        userInput = input.next();
        if (statesAndCapitals[i][1].equals(userInput)) {
            correctStates++;
            System.out.println("Yes that is the capital of " + statesAndCapitals[i][0] + ".");
        }//end of if

        else {
            System.out.println("No that is not the capital of " + statesAndCapitals[i][0] + ".");
            i++;
        }//end of else
    }//end of for loop

    // counts the number of correct guesses.
    System.out.println("Total number of capitals answered correctly: " + correctStates + ".");
    i++;
    return;

    */

}

public static <T> List<List<String>> twoDArrayToList(T[][] twoDArray){
    List<T> list = new ArrayList<T>();
    for (T[] array : twoDArray) {
        list.addAll(Arrays.asList(array));
    }
    return (List<List<String>>) list;
  }
}

这不是解决您问题的正确数据结构。 您需要一个成对的列表/数组(例如List<Map.Entry<String, String>> ),然后在该列表上调用Collections.shuffle()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM