这是我的代码
import 'dart:io';
import 'dart:math';
void main() {
bool flag = false;
for (int i = 0; i < 100; i++) {
gameCode();
if (userNumber == computerNumber) {
flag = true;
break;
}
}
}
int randomNumber(number) {
Random randNumber = Random();
int random = randNumber.nextInt(number);
return random;
}
gameCode() {
int computerNumber = randomNumber(9);
print("start guessing the number : ");
int userNumber = int.parse(stdin.readLineSync()!);
if (userNumber == computerNumber) {
print("You got it");
}
}
在此代码中您可以看到
gameCode
函数。在该函数中,我需要在主函数中使用两个值。那么我如何从该函数返回这两个关键字?
//userNumber // computerNumber
这是我想从该代码返回的变量
Dart 不支持在函数中返回多个值,您可以使用数组、映射返回它,也可以使用第三个库tuple
Dart 在当前最新版本中不支持返回多个值。对于您的情况,我建议创建一个类,用于定义
gameCode()
的结果。所以像这样:
class GameCodeResult {
int userNumber;
int computerNumber;
GameCodeResult({
required this.userNumber,
required this.computerNumber,
});
}
我们可以在您的程序中像这样使用它:
import 'dart:io';
import 'dart:math';
void main() {
bool flag = false;
for (int i = 0; i < 100; i++) {
GameCodeResult result = gameCode();
if (result.userNumber == result.computerNumber) {
flag = true;
break;
}
}
}
final _random = Random();
int randomNumber(int maxNumber) => _random.nextInt(maxNumber);
GameCodeResult gameCode() {
int computerNumber = randomNumber(9);
print("start guessing the number : ");
int userNumber = int.parse(stdin.readLineSync()!);
if (userNumber == computerNumber) {
print("You got it");
}
return GameCodeResult(userNumber: userNumber, computerNumber: computerNumber);
}
注意,我还修复了您的
randomNumber()
方法,因为不建议为您想要的每个新随机数生成新的 Random()
对象。相反,我们应该在程序中重用 Random
的实例。
请参考以下代码
import 'dart:io';
import 'dart:math';
void main() {
bool flag = false;
for (int i = 0; i < 100; i++) {
Map<String, dynamic> res = gameCode();
print(res);
if (res['user_number'] == res['computer_number']) {
flag = true;
break;
}
}
}
int randomNumber(number) {
Random randNumber = Random();
int random = randNumber.nextInt(number);
return random;
}
Map<String, dynamic> gameCode() {
int computerNumber = randomNumber(9);
print("start guessing the number : ");
int userNumber =
int.parse(stdin.readLineSync()!);
if (userNumber == computerNumber) {
print("You got it");
}
return {
"computer_number": computerNumber,
"user_number": userNumber,
};
}
使用最新的
Dart: 3.0.0
版本,您可以使用 Records 从函数传递多个值
(int, int) gameCode() {
int computerNumber = randomNumber(9);
int userNumber = int.parse(stdin.readLineSync()!);
return (computerNumber,userNumber);
}
var result=gameCode();
print(result.$1);
print(result.$2);
使用最新的 Dart:3.0.0 版本,您可以使用 Records
从函数传递多个值import 'dart:io';
import 'dart:math';
import 'dart:math';
void main() {
bool flag = false;
for (int i = 0; i < 100; i++) {
var value = gameCode();
if (value.$1 == value.$2) {
flag = true;
break;
}
}
print("The flag is : $flag");
}
int randomNumber(number) {
Random randNumber = Random();
int random = randNumber.nextInt(number);
return random;
}
(int, int) gameCode() {
int computerNumber = randomNumber(9);
print("start guessing the computer number : $computerNumber");
int userNumber = int.parse(stdin.readLineSync()!);
print("start guessing the user number : $userNumber");
if (userNumber == computerNumber) {
print("You got it");
}
return (computerNumber, userNumber);
}
您现在可以使用记录来完成此操作,它应该允许您发送类型化属性。此示例将返回带有命名字段的记录。
({int computerNumber, int userNumber}) gameCode() {
...
return (computerNumber: computerNumber, userNumber: userNumber);
}
要解构命名字段,您可以使用冒号变量
main() {
final (:computerNumber, :userNumber) = gameCode();
}