(Java) Я не могу понять, как заполнить массив контрольным циклом, который требуется - PullRequest
0 голосов
/ 26 апреля 2019

Я должен: Создайте массив, который моделирует колоду карт. Например, «1_of_diamonds» представляет туз «2_of_diamonds» представляет 2 бриллианта, вплоть до «13_of_diamonds», которые представляет короля алмазов. Костюмы клубов, сердец и пиков представлены в аналогичном манера. Все эти элементы должны быть в одном массиве. Массив должен быть заполнен с помощью счетчик контролируемой петли. Вывести содержимое массива на экран. Перемешайте колоду.

У меня есть код, чтобы перемешать его, но я не знаю, как заполнить массив циклом, контролируемым счетчиком.

// это мой код

import java.util.Random;


public class Cards{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);

} //end main

public String[] shuffle(String[] deck) {
    Random rnd = new Random();
    for (int i = deck.length - 1; i >= 0; i--)
    {
        int index = rnd.nextInt(i + 1);
        // Simple swap
        String a = deck[index];
        deck[index] = deck[i];
        deck[i] = a;
    }
    return deck;

}
}// end class

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Существует способ Java8 + с использованием потоков и более старый способ с использованием циклов. Я предполагаю, что вы хотите старый способ, но я подумал, что было бы интересно сделать и то, и другое.

    // Streams way
    String[] array = Stream.of("spades", "diamonds", "hearts", "clubs")
            .map(suit -> IntStream.rangeClosed(1, 13).mapToObj(value -> value + "_of_" + suit))
            .flatMap(Function.identity())
            .toArray(String[]::new);

    // for loops way
    String[] deck = new String[52];

    for(int i = 0; i < 4; i++){
        String suit;
       switch(i){
           case 0:
               suit = "spades";
               break;
           case 1:
               suit = "diamonds";
               break;
           case 2:
               suit = "hearts";
               break;
           case 3:
           default:
               suit = "clubs";
               break;
       }
       for(int value = 0; value < 13; value++){
           deck[i * 13 + value] = (value + 1) + "_of_" + suit;
       }
    }


    System.out.println(Arrays.toString(array));
    System.out.println(Arrays.toString(deck));
0 голосов
/ 26 апреля 2019

Заполните метод ниже может помочь.

public static String[] populate(){
    String[] cards=new String[52];
    String[] types={"hearts", "spades", "clubs", "diamonds"};
    int current = 0;
    for(String type:types)
        for(int i = 1; i <= 13 ; i++)
            cards[current++] = i + "_of_" + type;

    return cards;
}
...