Случайный выбор из 2D Array - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь создать базовое приложение для викторины в Android Studio, но я все еще довольно новичок в этом и не уверен, какие термины использовать для поиска решения.Надеюсь, что кто-то здесь может помочь.

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

Темы и предметы связаны, но не связаны явно.Например, пользователь может выбрать только одну строку темы, которая будет содержать каждый элемент, связанный с этой темой.Или же они могли бы выбрать один столбец элементов, в котором содержалась бы каждая тема, связанная с этим элементом.

Я предполагаю, что это должно быть достигнуто с помощью двумерного массива в XML, , как показано на рисунке. Зеленые клетки - это выбранные элементы, а красные - те, которые не были выбраны.Затем работайте с массивом в Java.

Я знаю, как создать двумерный массив, но у меня недостаточно опыта, чтобы быть уверенным, что это правильное решение.Я также не уверен, как управлять этим.Должен ли я взять выбор пользователя и использовать его для создания нового массива?Или я могу сохранить исходный массив, рандомизировать числа и пропустить те, которые не были выбраны?

Если кто-нибудь может указать мне правильное направление или предложить лучшее решение, это будет с благодарностью!

1 Ответ

0 голосов
/ 01 июня 2018

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

Давайте работать с тем, что вы уже имели в виду (так как вы говорите, что выЯ уже знаю, как создать 2D-массив для выбранных элементов), но затем давайте преобразуем ваш массив в ArrayList, потому что я чувствую, что они предлагают лучшую структуру для работы.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.stream.Collectors;

String[][] twoDimentionalArrayOfEverything = { 
        {"item1", "item2", "item3"}, 
        {"item4", "item5", "item6"}, 
        {"item7", "item8", "item9"} };

ArrayList<String> selectedItemsForQuiz = 
   Arrays.stream(twoDimentionalArrayOfEverything)
    .flatMap(a -> Arrays.stream(a))
    //filter selected items
    .filter(b->b.equals("item1") || b.equals("item9") )
    //now turn to a collection
    .collect(Collectors.toCollection(() -> new ArrayList<String>()));

    //loop the list
    selectedItemsForQuiz.forEach(System.out::println);  //item1 and item9 

и вотверсия, использующая целочисленные значения вместо строк

Integer[][] answerNumbers = { 
            {1, 2, 3}, 
            {4, 5, 6}, 
            {7, 8, 9} };

ArrayList<Integer> selectedItemsNumber = Arrays.stream(answerNumbers)
       .flatMap(a -> Arrays.stream(a))
        //filter selected items
        .filter(b->b.equals(1) || b.equals(9) )
        //now turn to a collection
       .collect(Collectors.toCollection(() -> new ArrayList<>()));

selectedItemsNumber.forEach(System.out::println);  //1 and 9 

И после всего этого, поскольку вы заявили, что хотите рандомизировать выделение, перемешивание должно работать из коллекций Java:

Collections.shuffle(selectedItemsForQuiz);  //Strings
Collections.shuffle(selectedItemsNumber);  //Integers
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...