Arhn - архитектура программирования

Как генерировать уникальные случайные числа во флаттере и, если они генерируются, как переназначить состояние

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

Ниже мой код. кто-нибудь может мне помочь?

class _StartGameState extends State<StartGame> {
  int inp1, inp2;
  GenerateQuestion g = new GenerateQuestion();
  int num1, num2, num3, num4;
  int no1, no2, no3, no4;
  int pos;
  int res;
  Map answers;
  bool flag = true;

  void getNum() {
    num1 = g.generateNum();
    num2 = g.generateNum();
    num3 = g.generateNum();
    num4 = g.generateNum();
    inp1 = g.generateValue();
    inp2 = g.generateValue();
    // this method returns value from 0 to 3
    pos = g.answerPosition();
    res = inp1 + inp2;
    switch (pos) {
      case 0:
        num1 = res;
        break;
      case 1:
        num2 = res;
        break;
      case 2:
        num3 = res;
        break;
      case 3:
        num4 = res;
        break;
    }
    if (res == num1 || res == num2 || res == num3 || res == num4) {
      if (num1 != num2 &&
          num1 != num3 &&
          num1 != num4 &&
          num2 != num3 &&
          num2 != num4 &&
          num3 != num4) {
        setState(() {
          no1 = num1;
          no2 = num2;
          no3 = num3;
          no4 = num4;
        });
      }
    }
  }
}

GenerateQuestion — это отдельный файл класса. который имеет простые методы, которые создают случайный объект с диапазоном и возвращают значение;

Мой интерфейс похож на введите здесь описание изображения

16.11.2020

  • Я не понимаю Но проблема иногда в похожих вариантах, и я не хочу исправлять варианты для результата.. Можете попробовать уточнить, в чем проблема? Кроме того, ваш код можно сделать намного проще, но мне нужно знать, каким должно быть ожидаемое поведение. 16.11.2020
  • Мне нужно 4 уникальных варианта в качестве ответа на дополнение. но random() иногда возвращает два одинаковых целых числа, потому что диапазон составляет только до 20. Так, например, если мой вопрос 10 + 5 = ? Мне нужны варианты ответов, т. Е. Число1, число2, число3, число4, которые могут быть 10, 15, 20, 18. Но иногда я получаю такие варианты, как, 10, 15, 15, 20. Здесь 15 - правильный ответ. но поскольку для правильного ответа (15) генерируются два варианта, пользователь может запутаться, какой из них выбрать. для этого мне нужны уникальные параметры, и один из них должен быть результатом добавления. 16.11.2020
  • Вы имеете в виду равные целые числа? Подобное не должно быть проблемой, если оно не совпадает с другим значением? 16.11.2020
  • Да равные целые числа. Я не хочу равнять целые числа для правильного ответа 16.11.2020
  • У меня есть такой интерфейс i.stack.imgur.com/VrN5Y.png, где четыре поля - это варианты ответа на вопрос. 16.11.2020

Ответы:


1

Чтобы убедиться, что параметры не повторяются, вы должны проверить параметр после его создания с уже сгенерированными параметрами, например,

//create a list to store options
var optionList = new List(4);
while(optionList.length() < 4){
  // generate your option
  int option = g.generateNum();
  if(!optionList.contains(option)){
      optionList.add(option);
   }
}
// then get your options
num1 = optionList[0];
num2 = optionList[1];
num3 = optionList[2];
num4 = optionList[3];

 
16.11.2020

2

Я сделал следующий пример, который показывает, как вы можете генерировать свои параметры:

import 'dart:math';

void main() {
  final options = getOptions(15, 0, 20, 4);

  final num1 = options[0];
  final num2 = options[1];
  final num3 = options[2];
  final num4 = options[3];

  print('num1: $num1'); // num1: 17
  print('num2: $num2'); // num2: 15
  print('num3: $num3'); // num3: 5
  print('num4: $num4'); // num4: 0
}

List<int> getOptions(int answer, int min, int max, int numberOfOptions) {
  final rnd = Random();
  final options = {answer};

  while (options.length < numberOfOptions) {
    options.add(min + rnd.nextInt(max - min));
  }

  return options.toList()..shuffle();
}

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

16.11.2020
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..