首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Flutter中调用函数时遇到空引用问题

在Flutter中调用函数时遇到空引用问题
EN

Stack Overflow用户
提问于 2021-08-07 17:54:02
回答 1查看 32关注 0票数 1

我目前正在尝试创建一个带有Flutter的应用程序,帮助用户记住法语动词。下面是我的代码片段:

代码语言:javascript
复制
class Quiz {
  List<String> questionList;
  List<String> answerList;
  Quiz(List questionList, List answerList){
    this.questionList = questionList;
    this.answerList = answerList;
  }
}

正如您所看到的,我已经创建了一个带有两个参数的Quiz类:一个测试问题列表和一个相应答案列表。

然后,我定义了一个函数,它实际上返回一个'Quiz‘对象。这就是它:

代码语言:javascript
复制
Quiz quizGenerator (questions, answers) {
  final Set<int> indexS = Set();
  for (int i = 0; i <= 9; i++){
    indexS.add(Random().nextInt(49));
  }
  List<String> testQ;
  List<String> testA;
  List<int> indexes = indexS.toList();
  for (int i = 0; i <= 9; i++){
    var element = indexes[i];
    testQ[i] = questions[element];
    testA[i] = answers[element];
  }
  var newTest = Quiz(testQ, testA);
  return newTest;
}

我想让这个函数返回一个'Quiz‘对象,该对象包含10个要测试的动词,这些动词是从一个更大的列表中随机挑选出来的,列表中有50个动词,称为"questions",以及它们从更大的列表" answers“中得到的相应答案。由于我计划通过生成随机索引号来挑选测试题,并且我不希望动词在测试中重复,因此我创建了一组名为“indexS”的整数,并用0-49范围内的10个随机数填充它。这个集合基本上包含了从较大的“问题”列表中提出的十个问题的索引号。

然后,我将该集合转换为一个称为“索引”的整数列表。我还创建了另外两个名为"testQ“和"testA”的列表,它们将分别包含10个测试题及其对应的答案。这两个列表将是“Quiz”对象的属性。然后,我使用一个for循环,通过使用存储在“索引”列表中的随机索引号,用十个测试题及其答案填充“testQ”和“testA”。所有这一切的最终结果是“quizGenerator”返回了一个“Quiz”对象。

然而,当我尝试调用‘quizGenerator’时,我得到了以下错误:

代码语言:javascript
复制
The following NoSuchMethodError was thrown while handling a gesture:
The method '[]=' was called on null.
Receiver: null
Tried calling: []=(0, "to open")

如果这个问题的答案是显而易见的,我很抱歉,但我刚刚开始编程,我已经在互联网上搜索了几天,但没有多少运气。如果有什么不清楚的地方,或者你需要其他东西来更好地回答我的问题,请告诉我。谢谢!

编辑:

以下是“问题”和“答案”的声明:

代码语言:javascript
复制
List<String> answers = ['rentrer', 'vivre', 'rendre', 'tenir', 'oublier', 'travailler', 'manger', 'entrer', 'devenir', 'commencer', 'payer', 'tirer', 'ouvrir', 'changer', 'excuser', 'dormir', 'occuper', 'marcher', 'envoyer', 'apprendre', 'boire', 'garder', 'montrer', 'asseoir', 'porter', 'prier', 'servir', 'écrire', 'retrouver', 'gagner', 'acheter', 'rappeler', 'lire', 'monter', 'quitter', 'emmener', 'toucher', 'continuer', 'raconter', 'repondre', 'sauver', 'rencontrer', 'fermer', 'valoir', 'compter', 'bouger', 'apporter', 'décider', 'vendre', 'expliquer',];

List<String> questions = ['to bring in','to live','to return','to hold','to forget','to work','to eat','to go in','to become','to start','to pay','to pull','to open','to change','to forgive','to sleep','to occupy','to walk','to send','to learn','to drink','to look after','to show','to sit down','to carry','to pray','to serve','to write','to find', 'to win', 'to buy', 'to remind', 'to read', 'to go up', 'to leave', 'to take', 'to touch', 'to continue', 'to tell', 'to answer', 'to save', 'to meet', 'to close', 'to hold', 'to count', 'to move', 'to bring', 'to decide', 'to sell', 'to explain',];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-07 17:57:24

未初始化testQtestA。用一个空列表初始化它们。

代码语言:javascript
复制
List<String> testQ = [], testA = [];

使用add方法将数据添加到列表中。

代码语言:javascript
复制
testQ.add(questions[element]);
testA.add(answers[element]);

如果一些随机数是相同的,那么set将只存储唯一的。不要使用集合,直接使用列表,或者在变量可以是某个列表或集合的情况下,使用i <= _variable.length而不是i <= 9

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68694862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档