【问题标题】:dart: access function from listdart:从列表中访问函数
【发布时间】:2021-04-17 09:42:07
【问题描述】:

编辑:我知道,总是调用列表中的第一个元素,这不是重点。我想拨打 numbers[0] 功能。它会重新生成新的 int。实际上代码与我的不一样,我有一个自定义类,它基于具有随机 int 的函数,我需要使用我的自定义类的列表,所以如果我在列表中使用 func 它会很棒,如何我可以每次都制作新的号码列表吗?当应用程序开始列表重新生成时,但我想当我调用列表时,它将重新生成

我想为每个打印打印新的 int 但它打印相同的 int ,我尝试了很多东西但我无法弄清楚

void main{
  int ramdomint(){
    
   final _random = new Random();
    int _num =  _random.nextInt(100);
    return _num;
  }
  
  List<int> numbers=[ramdomint(),ramdomint(),ramdomint()];
  
  void printNums(){
    for(var i=0;i<3;i++){
      List<int> newNumbers =new List.from(numbers); //what can i use for this?
      print(newNumbers[0]); //edit:i dont want [i], iwant to use ewNumbers[0] for new int for each time
    }
  }
  printNums();
// expected new int for each but same one
}

朋友的解决方案:

import 'dart:math';

int get ramdomint => Random().nextInt(100);

List<int> get numbers => [ramdomint, ramdomint, ramdomint];

void main() {
  for (var i = 0; i < 3; i++) {
    print(numbers[0]);
  }
}

【问题讨论】:

  • 其他答案指出了您的主要问题。此外,您不应在每次需要随机数时生成新的随机数生成器(即 Random 实例)。相反,您应该创建一个共享的 Random 实例;这可以保证您不会意外创建两个具有相同种子的 RNG。

标签: dart


【解决方案1】:
  1. 不要嵌套函数。将ramdomintprintNums 移到main 函数之外。
  2. main 函数添加一个空的参数列表。
  3. printNums:将数字列表作为参数传递。
  4. printNums:如果只想显示列表的内容,则不需要将列表复制到newNumbers
  5. printNums:问题是,您只能访问列表的第一个元素(带有0 索引)。
import 'dart:math';

void main() {
  List<int> numbers = [ramdomint(), ramdomint(), ramdomint()];

  printNums(numbers);
}

int ramdomint() => Random().nextInt(100);

void printNums(List<int> numbers) {
  // Easier way:
  for (int item in numbers) {
    print(item);
  }

  // Your way:
  for (int i = 0; i < numbers.length; i++) {
    print(numbers[i]);
  }
}

编辑:

根据@jamesdlin 的评论,您可以扩展列表类以随机化列表中的唯一值:

import 'dart:math';

void main() {
  var numbers = <int>[]..randomize();

  printNums(numbers);
}

void printNums(List<int> numbers) {
  // Easier way:
  for (int item in numbers) {
    print(item);
  }

  // Your way:
  for (int i = 0; i < numbers.length; i++) {
    print(numbers[i]);
  }
}

extension on List<int> {
  void randomize({
    int length = 3,
    int maxValue = 100,
  }) {
    final generator = Random();
    for (var i = 0; i < length; i++) {
      add(generator.nextInt(maxValue));
    }
  }
}

【讨论】:

    【解决方案2】:

    这里的问题是您正在从numbers 列表创建一个列表并且只访问第一个元素。

    所以它总是打印第一个元素。

    import 'dart:math';
    
    void main() {
      int ramdomint(){
        
      final _random = new Random();
        int _num =  _random.nextInt(100);
        return _num;
      }
      
      List<int> numbers=[ramdomint(),ramdomint(),ramdomint()];
      
      void printNums(){
        for(var i=0;i<3;i++){
          print(numbers[i]);
        }
      }
    
      printNums();
    
    }
    

    不要newNumbers,因为它已经在List中。

    以及List.from()的用法-Documentation

    希望有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2013-01-18
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 2021-08-20
      • 2021-05-24
      相关资源
      最近更新 更多