Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
div22
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 47
1

Как массив сгенерированых чисел использовать в switch case

02.05.2018, 21:23. Просмотров 394. Ответов 4

Всем привет!
Есть Fragments между которыми я переключаюсь нажатием кнопки используя swich case и random. Но рандом дублирует числа и поэтому открываются Фрагменты повторно, а мне этого не нужно.

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

Вопрос, как мне использовать этот сгенерировавшийся массив в switch case, который у меня используется в обработчике нажатия кнопки onClickNext. И потом еще "определить" действия при завершении массива.

Кто мне поможет? Кто подскажет? За любую информацию спасибо!

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
  
Set<Integer> generated = new LinkedHashSet<Integer>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        if (max < numbersNeeded)
        {
            throw new IllegalArgumentException("Can't ask for more numbers than are available");
        }
        Random rng = new Random();                                  // Ideally just create one instance globally
                                                                                     // Note: use LinkedHashSet to maintain insertion order
        generated = new LinkedHashSet<Integer>();
        while (generated.size() < numbersNeeded) {
            next = rng.nextInt(max) + 1;
                                                                                   // As we're adding to a set, this will automatically do a containment check
            generated.add(next);
            Log.d(TAG, "Here:" + next);
 
        }
    }
 
 
 
 
    public void onClickNext(View view) {
 
 
            switch (next) {
                case 1: {
                    Log.d(TAG, "Here:" + next);
 
                }
                break;
                case 2: {
                  Log.d(TAG, "Here:" + next);
 
 
                }
                break;
                case 3: {
                   Log.d(TAG, "Here:" + next);
 
 
                }
                break;
 
                case 4: {
                  Log.d(TAG, "Here:" + next);
 
 
                }
                break;
                case 5: {
                   Log.d(TAG, "Here:" + next);
 
 
                }
                break;
 
                default: {
                   // Log.d(TAG, "Here:" + next);
 
 
                }
                break;
            }
 
        }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2018, 21:23
Ответы с готовыми решениями:

Не открывает картинку через switch case
@Override public void onCheckedChanged(RadioGroup group, int...

java 1.7 eclipse switch/case пичаль
Здравствуйте есть проблема. для проекта нужно использовать switch/case по...

Как использовать один и тот же case в switch несколько раз?
Как использовать один и тот же case в switch несколько раз?

Что лучше использовать? if-else, switch-case или class?
Что используется чаще в програмирование когда есть много вариантов выбора? К...

switch-case, как писать в самом case
Такс дело вот в чём,прога работает всё хорошо,вот только мне не нравится как...

4
+1
324 / 157 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
03.05.2018, 06:55 2
Если я правильно понял задачу, тебе в OnClick нужно получить рандомное число из массива.
Делай так.
При создании задай переменную счетчик.
Java
1
2
int iCounter = 0;
int iArray[] = new int[100]; // или сколько тебе там надо рандомных чисел, сюда закидаешь
В обработчике:
Java
1
2
3
4
5
public void onClickNext(View view) {
next = iArray[iCounter];
iCounter++;
if (iCounter == iArray.length) iCounter = 0;
Log.d(TAG, "Here:" + next);
1
div22
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 47
03.05.2018, 09:29  [ТС] 3
Да мне нужно получить из массива рандомное число без повторов, это число будет номером case № в switch.
Например: сгенерированый массив {9,5,15,25,1} можно ли в взять из него по очереди эти номера и подставить в обработчик, что бы при клике на кнопку срабатывали switch case 9:...case 5:... т.д.

Подставил ваш метод, при клике на кнопку iCount выдает числа по порядку 1,2,3,4 и тд. или может я что то не так делаю?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  int max = 12;
    int numbersNeeded = 5;
    int iCounter = 0;
    int iArray[] = new int[5]; // или сколько тебе там надо рандомных чисел, сюда закидаешь
    Set<Integer> generated = new LinkedHashSet<Integer>();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setHashList();
    }
 
    private void setHashList() {
 
        if (max < numbersNeeded)
        {
            throw new IllegalArgumentException("Can't ask for more numbers than are available");
        }
        Random rng = new Random(); // Ideally just create one instance globally
        // Note: use LinkedHashSet to maintain insertion order
        generated = new LinkedHashSet<Integer>();
        while (generated.size() < numbersNeeded) {
            next = rng.nextInt(max)+1;
            // As we're adding to a set, this will automatically do a containment check
            generated.add(next);
            Log.d(TAG, "ТУТ:" + generated);
        }
 
    }
    public void onClickNext(View view) {
 
      next = iArray[iCounter];
        iCounter++;
        if (iCounter == iArray.length) iCounter = 0;
 
            switch (iCounter) {
                case 1: {
                    Log.d(TAG, "ТУТ:" + iCounter);
 
                }
                break;
                case 2: {
                  Log.d(TAG, "ТУТ:" + iCounter);
 
 
                }
                break;
                case 3: {
                  Log.d(TAG, "ТУТ:" + iCounter);
 
 
                }
                break;
 
                case 4: {
                  Log.d(TAG, "ТУТ:" + iCounter);
 
 
                }
                break;
                case 5: {
                  Log.d(TAG, "ТУТ:" + iCounter);
 
 
                }
                break;
......
Может все удобнее сделать как то другим способом?
Идея такова: Это Quiz есть 100 вопросов в виде Фрагментов, нужно использовать только 50 из них в рандомном порядке, без повторений, по окончанию вывести диалоговое окно, переключение между фрагментами кликом кнопки... Как мне это реализовать?
0
ExFau$t
676 / 567 / 131
Регистрация: 08.05.2012
Сообщений: 2,815
03.05.2018, 10:36 4
Берёшь рандом от 1 до 100, суёшь в цикл пока не будет 50 размер листа, как получил число - проверяешь его наличие в листе, если нет - добавляешь. На выходе будет 50 уникальных чисел в разброс. Можно заморочиться и сделать, чтобы не было холостых проходов, например, если бы было 1000 вопросов, а надо было 50, то можно было бы брать по одному случайному с каждых 20. Вариантов куча.
1
+1
324 / 157 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
03.05.2018, 13:34 5
Не пойму, что ты к этому switch-case привязался?
Оно тебе точно надо?
Я ж тебе рабочий уже код написал, осталось только скобку закрыть
0
03.05.2018, 13:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2018, 13:34

Оптимальная конструкция switch-case-while / while-switch-case
Имеется конструкция типа: switch() { case 1: while() { ... }

Оператор Switch() case: сравнение с диапазоном чисел
Добрый день. Помогите с синтаксисом записи оператора Switch. Мне нужно после...

Switch case в C# как?
В зависимости от того какой TagInstance указан при вызове, нажимается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru