Как взять пользовательский ввод и выполнить поиск по массиву в другом классе для ввода пользователя? - PullRequest
1 голос
/ 04 июля 2019

Обновление: После применения улучшений, предложенных @ user27158 (спасибо), я столкнулся с другой проблемой при запуске программы.

Появляется ошибка, которая фактически останавливает продолжение программы. Посмотрев на это, я не могу понять, в чем проблема. Еще раз, я новичок в программировании, и, скорее всего, я просто упускаю что-то совершенно простое.

Сообщение об ошибке:

Исключение в потоке "main" java.lang.UnsupportedOperationException: пока не поддерживается. at country.game.EuropeanCountries.EuropeanCountriesList (EuropeanCountries.java:17) at country.game.Main.main (Main.java:36) Ява вернулась: 1 СБОЙ СТРОИТЕЛЬСТВА (общее время: 12 секунд)

Ошибка возникает в строке:

List<String> euCountries = EuropeanCountries.EuropeanCountriesList();

Основной класс:

package country.game;

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


public class Main {

    public static List<String> EuropeanCountriesList() {
        List<String> EuropeanCountries = new ArrayList<>();
        return EuropeanCountries;
    }



    public static void main(String[] args) {

        boolean Running = true;

        List<String> UsedCountries = new ArrayList<>();

        Scanner Reader = new Scanner(System.in);

        while(Running == true){



            System.out.println("Pick a Country: ");
            String UserChoice = Reader.next();




            List<String> euCountries = EuropeanCountries.EuropeanCountriesList();

            if(!euCountries.contains(UserChoice)){
                System.out.println("That is not a valid country");
            } else {
                if(UsedCountries.contains(UserChoice)) {
                    System.out.println("Sorry you have already used that country");
                } else {
                    System.out.println("Correct! That Country is in Europe!");
                    UsedCountries.add(UserChoice);
                }
            }
        }        
    }           
}


"Европа" класс

package country.game;

import java.util.Arrays;
import java.util.List;

public class Europe {

    private static final List<String> EuropeanCountries = Arrays.asList(
            new String[]{
                "Albania",
                "Andorra",
                "Austria",

                "Belarus",
                "Belgium",
                "Bosnia and Herzegovina",
                "Bulgaria",

                "Croatia",
                "Czechia",

                "Denmark",

                "England",
                "Estonia",

                "Finland",
                "France",

                "Germany",
                "Greece",

                "Hungary",

                "Iceland",
                "Ireland",               
                "Italy",

                "Kosovo",

                "Latvia",
                "Liechtenstein",
                "Lithuania",
                "Luxembourg",

                "Malta",
                "Moldova",
                "Monaco",
                "Montenegro",

                "Netherlands",
                "Northern Ireland",
                "North Macedonia",
                "Norway",

                "Poland",
                "Portugal",

                "Romania",

                "San Marino",
                "Scotland",
                "Serbia",
                "Slovakia",
                "Slovenia",
                "Spain",
                "Sweden",
                "Switzerland",

                "Turkey",

                "Ukraine",

                "Vatican City",

                "West Russia",
            }
    );


    public static List<String> EuropeanCountriesList(){

    return EuropeanCountries;
    }    

}

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 04 июля 2019

Для начала, в коде есть несколько улучшений, которые вы должны сделать;

  1. Запуск никогда не увеличивается, поэтому цикл while никогда не закончится
  2. Вы хотите инициализировать сканер только один раз, так что делайте это вне цикла
  3. Вы пытаетесь сравнить строку со значением типа int
  4. Ваш список 'UsedCountries' является общим. Это никогда не является хорошей идеей, поскольку не ограничивает типы, которые вы можете в них помещать, а это означает, что у вас могут быть ошибки, которые появляются только во время выполнения. Должен быть объявлен как List<String> UsedCountries = new ArrayList<>();
  5. Имена переменных и методов должны начинаться со строчной буквы https://www.oracle.com/technetwork/java/codeconventions-135099.html

Исправление: Как получить доступ к массиву из вашего другого класса

  • верните его из вашего метода
  • работа с возвращаемым списком
    public static List<String> EuropeanCountriesList() {
        // declaring as List as it is best to not tie yourself to a specific implementation
        List<String> EuropeanCountries = new ArrayList<>();
        ...
        return EuropeanCountries;
    }

тогда

    String UserChoice = Reader.next()
    List<String> euCountries = EuropeanCountries.EuropeanCountriesList();
    ...

Приведенный выше код позволяет вам использовать arraylist в вашем текущем коде. Я хотел бы предложить несколько дополнительных улучшений, хотя

  1. Когда у вас есть список, просто используйте метод contains вместо циклов for
    List<String> euCountries = EuropeanCountries.EuropeanCountriesList();
    // step 1 - check if it is one of the acceptable countries
    if (!euCountries.contains(UserChoice)) {
        System.out.println("That is not a valid country");
    } else {
        // step 2 - check if it has already been selected
        if (UsedCountries.contains(UserChoice)) {
            System.out.println("Sorry You Have Already Used That Country");
        } else {
            System.out.println("Correct! That Country is in Europe!");
            UsedCountries.add(UserChoice);
        }
    }
  1. Вместо того чтобы создавать список стран при каждом вызове этого метода, объявите его один раз и верните вместо него сохраненный список
public class Europe {
    private static final List<String> EuropeanCountries = Arrays.asList(
        new String[]{
            "Albania", 
            "Andorra",
            ...
        }
    );

    public static List<String> EuropeanCountriesList() {
        return EuropeanCountries;
    }
}

Надеюсь, это все поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...