вернуть целочисленное значение случайного строкового ключа - PullRequest
0 голосов
/ 24 января 2019

Это мой проект BlackJack, и в настоящее время он возвращает только 1 карту.Я изо всех сил пытаюсь получить randomKey равным его значению в HashMap

public static void main(String[] args) {

    Random ran = new Random();
    Scanner in = new Scanner(System.in);

    HashMap<String, Integer> hash = new HashMap<String, Integer>();
    hash.put("2", 2);
    hash.put("3", 3);
    hash.put("4", 4);
    hash.put("5", 5);
    hash.put("6", 6);
    hash.put("7", 7);
    hash.put("8", 8);
    hash.put("9", 9);
    hash.put("10", 10);
    hash.put("Jack", 10);
    hash.put("Queen", 10);
    hash.put("King", 10);
    hash.put("Ace", 11);

    List<String> keyList = new ArrayList<>(hash.keySet());
    List<Integer> valueList = new ArrayList<>(hash.values());


    String[] colors = {"Spades", "Hearts", "Diamonds", "Clubs"};

    for (int i = 0; i < 1; i++) {
        int col = ran.nextInt(colors.length); // random color
        String randomKey = keyList.get(ran.nextInt(hash.size())); // random type
        int keyValue = valueList.get(ran.nextInt(hash.size())); 

        System.out.println(randomKey+ " of "+colors[col]);
        if (keyValue < 21) {System.out.println(keyValue);}
    } // returns a cards

Я использовал if (keyValue < 21) {System.out.println(keyValue);}, чтобы проверить, будет ли keyValue равно уникальному значению случайного ключа.Очевидно, что это не так, но мне нужно, чтобы я мог рассчитать сумму нескольких карточек, распечатывая только ключи.

1 Ответ

0 голосов
/ 24 января 2019

В этих двух строках:

    String randomKey = keyList.get(ran.nextInt(hash.size())); // random type
    int keyValue = valueList.get(ran.nextInt(hash.size()));

вы выбираете два (разных) случайных числа и используете их для получения ключа и значения. Поскольку оба вызова ran независимы, ничто не заставляет сгенерированное значение соответствовать сгенерированному ключу. Я думаю, что вы хотите сделать, это получить случайное число для выбора случайной карты, а затем использовать HashMap для поиска значения, соответствующего выбранной карте.

    String randomKey = keyList.get(ran.nextInt(hash.size())); // random type
    int keyValue = hash.get(randomKey); 

Вы можете сказать, что находитесь на неправильном пути, потому что в предоставленном коде вы никогда не читаете с hash.

...