Menu
CoddyTech

使用 'any' 检查条件

本课属于 Coddy Dart 学习旅程的“逻辑与流程控制”单元。第 13 课,共 65 课。

有时,你需要检查列表中是否至少有一个元素满足特定条件,而不必检查每一个元素。any() 方法会在找到第一个满足测试条件的元素时立即返回 true,因此可以高效地完成这项检查。

any() 方法接受一个测试函数,该函数会为每个元素返回 true 或 false。只要有任何元素通过测试,any() 就会立即返回 true。检查完整个列表后,如果没有元素通过测试,它就会返回 false。

List<double> prices = [15.99, 45.50, 120.00, 8.75];

// 检查是否有商品价格超过 $100
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem);  // true

这种方法在验证场景中特别有用,当你需要知道是否至少有一项符合特定条件时。any() 方法一旦找到匹配项就会停止检查,因此,当你只需要知道某项内容是否存在时,它比手动遍历整个列表更高效。

challenge icon

挑战

简单

创建一个管理安保系统的程序,检查建筑物中的传感器是否检测到了可疑活动。你的程序应该:

  1. 读取一个表示建筑物名称的字符串输入
  2. 读取多个表示不同楼层传感器读数的整数输入(收到 -1 时结束输入)
  3. 读取一个表示警报阈值的整数输入
  4. 使用 any() 方法检查是否有任何传感器读数大于或等于警报阈值
  5. 严格按照下方显示的格式打印安保监控结果

例如,如果建筑物名称是 "Office Tower",传感器读数依次为 15、23、8、45、12,警报阈值为 40,你的程序应该输出:

Building: Office Tower
Sensor readings: [15, 23, 8, 45, 12]
Alert threshold: 40
Checking for readings >= 40
Alert triggered: true
Status: Security breach detected - immediate response required

如果建筑物名称是 "Shopping Mall",传感器读数依次为 18、25、12、30,警报阈值为 50,你的程序应该输出:

Building: Shopping Mall
Sensor readings: [18, 25, 12, 30]
Alert threshold: 50
Checking for readings >= 50
Alert triggered: false
Status: All systems normal - no threats detected

如果建筑物名称是 "Warehouse",传感器读数依次为 75、82,警报阈值为 70,你的程序应该输出:

Building: Warehouse
Sensor readings: [75, 82]
Alert threshold: 70
Checking for readings >= 70
Alert triggered: true
Status: Security breach detected - immediate response required

你的程序必须使用 any() 方法检查是否有任何传感器读数大于或等于警报阈值。如果任何传感器触发警报,则显示 "Security breach detected - immediate response required";如果没有传感器超过阈值,则显示 "All systems normal - no threats detected"。

亲手试试

import 'dart:io';

void main() {
  // 读取建筑名称
  String? buildingName = stdin.readLineSync();
  
  // 读取传感器读数,直到遇到 -1
  List<int> sensorReadings = [];
  while (true) {
    int reading = int.parse(stdin.readLineSync()!);
    if (reading == -1) {
      break;
    }
    sensorReadings.add(reading);
  }
  
  // 读取警报阈值
  int alertThreshold = int.parse(stdin.readLineSync()!);
  
  // TODO: 在下方编写你的代码
  // 使用 any() 方法检查是否有传感器读数 >= 警报阈值
  
  // 按要求的格式输出结果
  print('Building: $buildingName');
  print('Sensor readings: $sensorReadings');
  print('Alert threshold: $alertThreshold');
  print('Checking for readings >= $alertThreshold');
  // 输出是否触发警报的结果和状态消息
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程控制中的所有课

自己练习: Dart 在线编译器