Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在颤振中生成唯一的随机数,如果生成相同的随机数,如何重新分配状态_Android_Flutter_Dart - Fatal编程技术网

Android 如何在颤振中生成唯一的随机数,如果生成相同的随机数,如何重新分配状态

Android 如何在颤振中生成唯一的随机数,如果生成相同的随机数,如何重新分配状态,android,flutter,dart,Android,Flutter,Dart,我是颤振初学者。我正在尝试做一个简单的加法程序,它将生成随机数来相互相加,并为答案创建4个随机选项,其中一个将是正确的答案。 但有时问题是类似的选项,我不想为了结果而修改选项 下面是我的代码。有人能帮我吗 class _StartGameState extends State<StartGame> { int inp1, inp2; GenerateQuestion g = new GenerateQuestion(); int num1, num2, num3, num

我是颤振初学者。我正在尝试做一个简单的加法程序,它将生成随机数来相互相加,并为答案创建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;
        });
      }
    }
  }
}
class\u StartGameState扩展状态{
intinp1,inp2;
GenerateQuestion g=新的GenerateQuestion();
整数num1、num2、num3、num4;
国际机场1号、2号、3号、4号;
int pos;
国际关系;
地图答案;
布尔标志=真;
void getNum(){
num1=g.generateNum();
num2=g.generateNum();
num3=g.generateNum();
num4=g.generateNum();
inp1=g.generateValue();
inp2=g.generateValue();
//此方法返回0到3之间的值
pos=g.应答位置();
res=inp1+inp2;
开关(pos){
案例0:
num1=res;
打破
案例1:
num2=res;
打破
案例2:
num3=res;
打破
案例3:
num4=分辨率;
打破
}
如果(res==num1 | | res==num2 | | res==num3 | | res==num4){
如果(num1!=num2&&
num1!=num3&&
num1!=num4&&
num2!=num3&&
num2!=num4&&
num3!=num4){
设置状态(){
no1=num1;
no2=num2;
no3=num3;
no4=num4;
});
}
}
}
}
GenerateQuestion是一个单独的类文件。它有简单的方法,可以创建具有范围的随机对象并返回值

我的界面就像

为了确保选项不会重复,您必须在使用已生成的选项生成选项后验证选项,例如

//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];

 
//创建一个列表来存储选项
var optionList=新列表(4);
while(optionList.length()<4){
//生成您的选项
int option=g.generateNum();
如果(!optionList.contains(选项)){
选项列表。添加(选项);
}
}
//那就让你选择吧
num1=选项列表[0];
num2=期权列表[1];
num3=期权列表[2];
num4=选项列表[3];

我制作了以下示例,展示了如何生成选项:

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();
}
import'dart:math';
void main(){
最终选项=获取选项(15,0,20,4);
最终num1=选项[0];
最终num2=选项[1];
最终num3=选项[2];
最终num4=选项[3];
打印('num1:$num1');//num1:17
打印('num2:$num2');//num2:15
打印('num3:$num3');//num3:5
打印('num4:$num4');//num4:0
}
列出getOptions(int-answer、int-min、int-max、int-numberOfOptions){
最终rnd=随机();
最终选项={答案};
while(options.length

可能生成的值列表将包括
min
,但不包括
max

我不理解“但问题有时是类似的选项,我不想为结果更正选项。”。你能试着澄清一下问题是什么吗?此外,您的代码可以简单得多,但我需要知道预期的行为应该是什么。我需要4个独特的选项作为添加的答案。但是random()有时返回两个相似的整数,因为范围最多只有20。例如,如果我的问题是10+5=?我想要答案选项,即num1、num2、num3、num4,可能是10、15、20、18。但有时我会有10,15,15,20这样的选择。这里15是正确答案。但由于为正确答案生成了两个选项(15),用户可能会混淆要选择哪一个。为此,我需要unqiue选项,其中一个应该是加法的结果。你是说相等的整数?只要与另一个值不相同,相似就不应该是问题?是,等于整数。我不想为了正确的答案而等于整数,我有这样的接口,其中四个框是问题的选项。