【问题标题】:how to reduce time to check conditions in loop or if-else statement如何减少在循环或 if-else 语句中检查条件的时间
【发布时间】:2020-11-17 05:45:11
【问题描述】:

颤振和飞镖。 嘿,我正在尝试在颤振应用程序中生成唯一的随机数。我在哪里生成 4 个随机整数,它们是两个随机整数相加的答案选项。基本上我正在生成随机添加问题。假设 4 + 5。我给用户 4 个选项,如 2、4、20、9。我试图使选项独一无二,一旦生成,然后将其设置为 Text() 小部件。 但是我的表达式需要很长时间才能生成超过 5 秒或有时 15 到 20 秒的结果。有什么方法可以快速生成 4 个随机唯一整数?因为这只是一场30秒的比赛。我想在用户按下当前问题的答案后立即为下一个问题生成答案

import 'dart:math';

void main() {
  GenerateQuestion g = new GenerateQuestion();
  g.generateNum();
}

class GenerateQuestion {
  var num1, num2, num3, num4;

  Random random = new Random();
  void generateNum() {
    num1 = random.nextInt(20);
    num2 = random.nextInt(20);
    num3 = random.nextInt(20);
    num4 = random.nextInt(20);
    bool flag = true;
    while (flag == true) {
      if (num1 != num2 && num1 != num3) {
        if (num1 != num4 && num2 != num3) {
          if (num2 != num4 && num3 != num4) {
            print(num1);
            print(num2);
            print(num3);
            print(num4);
            flag = false;
          }
        }
      } //if condition ends here

      else {
        num1 = random.nextInt(20);
        num2 = random.nextInt(20);
        num3 = random.nextInt(20);
        num4 = random.nextInt(20);
        flag = true;
      } // else part ends here
    } // while ends here
  } // generateNum() method ends here
}

还有一件事。这只是我在 Dartpad 中尝试的单独代码。因此它不包含小部件。我正在调用按钮的 onPressed 函数。但是当应用程序第一次启动时,它向我显示值 null。是的,因为未调用的函数应该显示为空。但是如何在加载小部件之前调用它,然后像 onPressed 一样开始工作?

【问题讨论】:

  • 使用一套数据结构,将随机数压入其中,直到长度为4。

标签: android performance flutter dart


【解决方案1】:

正如@Illegal Argument 所建议的,您可以使用如下所示的集合:

class GenerateQuestionSet {
  var num1, num2, num3, num4;

  final random = Random();

  void generateNum() {
    final numbers = <int>{};
    while (numbers.length < 4) {
      numbers.add(random.nextInt(20));
    }
    final nums = numbers.toList();
    num1 = nums[0];
    num2 = nums[1];
    num3 = nums[2];
    num4 = nums[3];
  }
}

另一种解决方案是在存在重复数字时不重新生成所有数字:

class GenerateQuestionWhile {
  var num1, num2, num3, num4;

  Random random = Random();
  void generateNum() {
    num1 = random.nextInt(20);
    do {
      num2 = random.nextInt(20);
    } while(num2 == num1);
    do {
      num3 = random.nextInt(20);
    } while(num3 == num2 || num3 == num1);
    do {
      num4 = random.nextInt(20);
    } while(num4 == num3 || num4 == num2 || num4 == num1);
  }
}

【讨论】:

    猜你喜欢
    • 2016-02-28
    • 2023-02-06
    • 1970-01-01
    • 2015-10-28
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多