简体   繁体   English

接受用户输入并搜索二维数组并打印结果

[英]Take user input and search through 2D array and printout the result

I am trying to make a program that takes input from the user, searches through 2D array and prints out if the input matches data from the arrays.我正在尝试制作一个程序,该程序从用户那里获取输入,搜索二维数组并打印出输入是否与数组中的数据匹配。 So, basically if the user types in VA , it should output Virginia .所以,基本上如果用户输入VA ,它应该输出Virginia I am reading data from a Binary file that has 2 rows of data.我正在从具有 2 行数据的二进制文件中读取数据。 The 1st row contains 2 letter abbreviations for all the states and the 2nd row contains the state names.第一行包含所有州的 2 个字母缩写,第二行包含州名称。 For example: VA Virginia and in new line FL Florida and so on.例如: VA Virginia 和新线FL Florida 等。 Below is what I have so far.以下是我到目前为止所拥有的。 readStateFile() method works fine. readStateFile()方法工作正常。 I just need some help with getState method.我只需要getState方法的一些帮助。

public static void main(String[] args) throws IOException {
        try {
            int age = getAge();
            String[][] states = readStateFile();
            String state = getState(states);

            int ZIPCode = getZIPcode();

            System.out.printf("\nAge:\t\t%d\n", age);
            System.out.printf("Address:\t%s %s\n\n", ZIPCode, state);

            System.out.println("Your survey is complete. " + "Your participation has been valuable.");
        } catch (CancelledSurveyException e) {
            System.out.println(e.getMessage());
        } finally {
            System.out.println("Thank you for your time.");
        }
    }
private static String getState(String[][] states) throws IOException {

        states = readStateFile();

        String in = "";
        String[][] abb;
        abb = states;

        System.out.println("Please enter the 2 letter state abbrevation or 'q' to quit: ");
        Scanner st = new Scanner(System.in);

        in = st.next();
        if (in.equals("q")) {

            System.out.println("Your survey was cancelled.\n" + "Thank you for your time.");
            System.exit(0);
        }
        if (abb.equals(states)) {

            for (int i = 0; states[0][i] != null; i++) {
                if (abb.equals(states[0][i])) {
                    for (int state = 1; state <= 100; state++) {

                        System.out.println(states[0][i]);
                    }
                }
            }
        } else {
            System.out.println("You've entered invalid state abbrevation.");
        }
        
        return in;
    }

    private static String[][] readStateFile() throws IOException {

        String states[][] = new String[50][50];

        try {
            FileInputStream fstream = new FileInputStream("states copy.bin");
            DataInputStream inputFile = new DataInputStream(fstream);

            for (int i = 0, j = i + 1; i < 50; i++) {
                states[i][0] = inputFile.readUTF();
                states[i][j] = inputFile.readUTF();
                // System.out.println(states);
            }
            inputFile.close();
            return states;
        } catch (EOFException e) {
            System.out.println("Survey Cancelled");
        }
        return states;
    } ```

Instead of using a multidimensional array, it might be more helpful to use a HashMap.使用 HashMap 可能比使用多维数组更有帮助。

Each abbreviation is used as a key, and the name of the state can be found using that key as a lookup.每个缩写都用作一个键,并且可以使用该键作为查找来找到州的名称。 Illustrated below:如下图:

public static void main(final String[] args)
{
    try
    {
        final Map<String, String> states = readStateFile();

        // Display the contents of the file
        // for (final Map.Entry<String, String> s : states.entrySet())
        // {
        //  System.out.println(s.getKey() + " = " + s.getValue());
        // }

        final String state = getState(states);
        final int age = getAge();
        final int postalCode = getZIPcode();

        System.out.println();
        System.out.printf("Age:\t\t%d\n", Integer.valueOf(age));
        System.out.printf("Address:\t%s %s\n\n", Integer.valueOf(postalCode), state);
        System.out.println("Your survey is complete. Your participation has been valuable.");
    }
    catch (final IOException ex)
    {
        System.out.println(ex.getMessage());
    }

    System.out.println("Thank you for your time.");
}

private static String getState(final Map<String, String> states)
{
    System.out.println("Please enter the 2 letter state abbrevation or 'q' to quit: ");
    final StringBuilder sb = new StringBuilder();

    try (final Scanner st = new Scanner(System.in))
    {
        final String stateAbbrev = st.next().toUpperCase(Locale.getDefault());
        if ("q".equals(stateAbbrev))
        {
            System.out.println("Your survey was cancelled." + System.lineSeparator() + "Thank you for your time.");
            System.exit(0);
        }

        if (states.containsKey(stateAbbrev))
        {
            final String stateName = states.get(stateAbbrev);
            sb.append(stateName);
        }
        else
        {
            System.out.println("You've entered an invalid state abbrevation: " + stateAbbrev);
        }
    }

    return sb.toString();
}

private static Map<String, String> readStateFile() throws IOException
{
    final List<String> lines = Files.readAllLines(Paths.get("C:/states copy.bin"));

    // Get a list of items, with each item separated by any whitespace character
    final String[] stateAbbrev = lines.get(0).split("\\s");
    final String[] stateNames = lines.get(1).split("\\s");

    final Map<String, String> states = new HashMap<>();
    for (int i = 0; i < stateAbbrev.length; i++)
    {
        states.put(stateAbbrev[i], stateNames[i]);
    }

    return states;
}

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

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