Dart - 数字类型、布尔类型、列表类型

一、数字类型

1、基本使用
  1. Dart 提供了 int 和 double 两种主要的数字类型,以及 num 作为它们的父类型
类型 说明
int 表示整数
double 表示双精度浮点数(小数)
num 可以同时表示整数和浮点数
dart 复制代码
int intValue = 42;
double doubleValue = 3.14;
dart 复制代码
num numInt = 100;
num numDouble = 99.99;
  1. 算术运算
dart 复制代码
int sum = 10 + 5;
int difference = 10 - 3;
int product = 4 * 7;
double quotient = 15 / 3;
int remainder = 17 % 5; // 取余
int quotientInt = 17 ~/ 5; // 整除

print('Sum: $sum');
print('Difference: $difference');
print('Product: $product');
print('Quotient: $quotient');
print('Remainder: $remainder');
print('Integer Quotient: $quotientInt');
复制代码
# 输出结果

Sum: 15
Difference: 7
Product: 28
Quotient: 5.0
Remainder: 2
Integer Quotient: 3
  1. 自增自减
dart 复制代码
int counter = 5;

counter++;

print('After increment: $counter');

counter--;

print('After decrement: $counter');
复制代码
# 输出结果

After increment: 6
After decrement: 5
2、数学运算库
  • Dart 在 dart:math 库中提供了丰富的数学函数
dart 复制代码
import 'dart:math';

void main() {

  // 幂运算
  print('pow(2, 3): ${pow(2, 3)}');

  // 平方根
  print('sqrt(16): ${sqrt(16)}');

  // 最大最小值
  print('max(10, 20): ${max(10, 20)}');
  print('min(10, 20): ${min(10, 20)}');

  // 随机数
  print('Random: ${Random().nextInt(100)}');
}
3、类型转换
(1)字符串转数字
  1. 基本转换
dart 复制代码
int intValue = int.parse('42');

print('Parsed int: $intValue');

double doubleValue = double.parse('3.14');

print('Parsed double: $doubleValue');
复制代码
# 输出结果

Parsed int: 42
Parsed double: 3.14
  1. 处理无效输入
dart 复制代码
try {
  int invalid = int.parse('abc');
} catch (e) {
  print('Parse error: $e');
}
复制代码
# 输出结果

Parse error: FormatException: Invalid radix-10 number (at character 1)
abc
^
  1. 安全转换
dart 复制代码
int? result1 = int.tryParse('123');

print(result1)

int? result2 = int.tryParse('abc');

print(result2);
复制代码
# 输出结果

Safe parsed int: 123
Safe parsed invalid: null
(2)数字转字符串
dart 复制代码
int num = 42;
double decimal = 3.14159;

// 基本转换
print('Int to String: ${num.toString()}');
print('Double to String: ${decimal.toString()}');

// 保留小数位
print('Fixed 2: ${decimal.toStringAsFixed(2)}');
print('Fixed 4: ${decimal.toStringAsFixed(4)}');
复制代码
# 输出结果

Int to String: 42
Double to String: 3.14159
Fixed 2: 3.14
Fixed 4: 3.1416
(3)int 与 double 互转
dart 复制代码
int intValue = 10;
double doubleValue = 3.14;
double doubleValue2 = 3.6;

// int 转 double
double fromInt = intValue.toDouble();
print('Int to Double: $fromInt');

// double 转 int (截断小数部分)
int fromDouble = doubleValue.toInt();
print('Double to Int: $fromDouble');

// 四舍五入转 int
int rounded = doubleValue2.round();
print('Rounded: $rounded');

// 向上向下取整
print('Floor: ${doubleValue.floor()}');
print('Ceiling: ${doubleValue.ceil()}');
复制代码
# 输出结果

Int to Double: 10.0
Double to Int: 3
Rounded: 4
Floor: 3
Ceiling: 4
4、常用属性
dart 复制代码
// int 的属性
int value = -42;
print('Hash code: ${value.hashCode}');
print('Bit length: ${value.bitLength}');
print('Sign: ${value.sign}');
print('Is even: ${value.isEven}');
print('Is odd: ${value.isOdd}');

// double 的属性
double d = 3.14159;
print('Is finite: ${d.isFinite}');
print('Is infinite: ${d.isInfinite}');
print('Is NaN: ${d.isNaN}');
print('Sign: ${d.sign}');
复制代码
# 输出结果

Hash code: 475673
Bit length: 6
Sign: -1
Is even: true
Is odd: false
Is finite: true
Is infinite: false
Is NaN: false
Sign: 1.0
5、注意事项
  • int 和 double 不能直接运算,需要先转换为相同类型。
dart 复制代码
// 错误

int result = 10 + 3.14;
dart 复制代码
// 正确

double result = 10.toDouble() + 3.14;

二、布尔类型

dart 复制代码
bool isActive = true;
bool isFinished = false;

if (isActive) {
  print('The system is active');
} else {
  print('The system is inactive');
}

三、列表类型

1、基本使用
  1. 创建列表
dart 复制代码
// 创建整数列表
List<int> numbers = [1, 2, 3, 4, 5];
print('Numbers: $numbers');

// 创建字符串列表
List<String> fruits = ['Apple', 'Banana', 'Orange'];
print('Fruits: $fruits');

// 创建动态类型列表
List<dynamic> mixed = [1, 'two', 3.0, true];
print('Mixed: $mixed');

// 创建空列表
List<int> emptyList = [];
print('Empty List: $emptyList');
复制代码
# 输出结果

Numbers: [1, 2, 3, 4, 5]
Fruits: [Apple, Banana, Orange]
Mixed: [1, two, 3.0, true]
Empty List: []
  1. 访问列表元素
dart 复制代码
List<int> numbers = [10, 20, 30, 40, 50];

// 通过索引访问
print('First element: ${numbers[0]}');
print('Third element: ${numbers[2]}');

// 使用 first 和 last
print('First: ${numbers.first}');
print('Last: ${numbers.last}');
复制代码
# 输出结果

First element: 10
Third element: 30
First: 10
Last: 50
  1. 修改列表元素
dart 复制代码
List<int> numbers = [1, 2, 3, 4, 5];

print('Original: $numbers');

// 修改单个元素
numbers[0] = 10;
print('After modifying first: $numbers');

// 修改最后一个元素
numbers[numbers.length - 1] = 50;
print('After modifying last: $numbers');
复制代码
# 输出结果

Original: [1, 2, 3, 4, 5]
After modifying first: [10, 2, 3, 4, 5]
After modifying last: [10, 2, 3, 4, 50]
  1. 添加元素
dart 复制代码
List<int> numbers = [1, 2, 3];

// 添加单个元素
numbers.add(4);
print('After add(4): $numbers');

// 添加多个元素
numbers.addAll([5, 6, 7]);
print('After addAll: $numbers');

// 在指定位置插入
numbers.insert(0, 0);
print('After insert at 0: $numbers');

// 插入多个元素
numbers.insertAll(2, [10, 20]);
print('After insertAll at 2: $numbers');
复制代码
# 输出结果

After add(4): [1, 2, 3, 4]
After addAll: [1, 2, 3, 4, 5, 6, 7]
After insert at 0: [0, 1, 2, 3, 4, 5, 6, 7]
After insertAll at 2: [0, 1, 10, 20, 2, 3, 4, 5, 6, 7]
  1. 删除元素
dart 复制代码
List<int> numbers = [1, 2, 3, 4, 5, 3, 6, 3];

// 删除第一个匹配的元素
numbers.remove(3);
print('After remove(3): $numbers');

// 删除指定索引的元素
numbers.removeAt(0);
print('After removeAt(0): $numbers');

// 删除最后一个元素
numbers.removeLast();
print('After removeLast: $numbers');

// 删除满足条件的元素
numbers.removeWhere((n) => n > 4);
print('After removeWhere(> 4): $numbers');

// 清空列表
numbers.clear();
print('After clear: $numbers');
复制代码
# 输出结果

After remove(3): [1, 2, 4, 5, 3, 6, 3]
After removeAt(0): [2, 4, 5, 3, 6, 3]
After removeLast: [2, 4, 5, 3, 6]
After removeWhere(> 4): [2, 4, 3]
After clear: []
  1. 查找元素
dart 复制代码
List<int> numbers = [1, 2, 3, 4, 5, 6];
List<int> withDuplicates = [1, 2, 3, 2, 3, 2];

// 检查是否包含元素
bool hasThree = numbers.contains(3);
print('Contains 3: $hasThree');

// 查找元素的索引
int index = numbers.indexOf(3);
print('Index of 3: $index');

// 查找最后一次出现的索引
int lastIndex = withDuplicates.lastIndexOf(2);
print('Last index of 2: $lastIndex');

// 查找满足条件的第一个元素
int? found = numbers.firstWhere((n) => n > 3);
print('First > 3: $found');
复制代码
# 输出结果

Contains 3: true
Index of 3: 2
Last index of 2: 5
First > 3: 4
2、创建特殊列表
  1. 固定长度列表
dart 复制代码
// 创建固定长度列表,填充默认值
List<int> fixedLength = List.filled(5, 0);
print('Fixed length: $fixedLength');

fixedLength[0] = 10;
print('After modify: $fixedLength');

// 不能添加或删除元素
// fixedLength.add(1);
// fixedLength.removeAt(0);
复制代码
# 輸出结果

Fixed length: [0, 0, 0, 0, 0]
After modify: [10, 0, 0, 0, 0]
  1. 生成列表
dart 复制代码
// 使用 generate 生成列表
List<int> generated = List.generate(5, (index) => index * 2);
print('Generated: $generated');

// 生成 0 ~ 9
List<int> range = List.generate(10, (i) => i);
print('Range 0-9: $range');
复制代码
# 输出结果

Generated: [0, 2, 4, 6, 8]
Range 0-9: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  1. 从其他集合创建
dart 复制代码
// 从 Iterable 创建
List<int> fromIterable = List.from([1, 2, 3, 4, 5]);
print('From Iterable: $fromIterable');

// 从 Set 创建
Set<int> set = {1, 2, 3, 2, 1};
List<int> fromSet = set.toList();
print('From Set: $fromSet');

// 使用 of
List<String> ofList = List.of(['a', 'b', 'c']);
print('From of: $ofList');

// 不可变列表
List<int> immutable = List.unmodifiable([1, 2, 3]);
print('Unmodifiable: $immutable');
// immutable[0] = 10;
复制代码
# 输出结果

From Iterable: [1, 2, 3, 4, 5]
From Set: [1, 2, 3]
From of: [a, b, c]
Unmodifiable: [1, 2, 3]
3、注意事项
  1. 列表索引越界
dart 复制代码
List<int> numbers = [1, 2, 3];

// 索引越界
// print(numbers[10]);

// 先检查长度
if (numbers.length > 10) {
  print(numbers[10]);
}

// 安全访问
int? safe = numbers.length > 10 ? numbers[10] : null;
print('Safe access: $safe');
  1. 空列表操作
dart 复制代码
List<int> empty = [];

// 空列表 remove 会返回 false
bool removed = empty.remove(1);
print('Remove from empty: $removed');

// 空列表 first / last 会报错
// print(empty.first);
// print(empty.last);

// // 先检查
if (empty.isNotEmpty) {
  print('First: ${empty.first}');
} else {
  print('List is empty');
}
相关推荐
艾iYYY11 小时前
详解string类的基础用法
c语言·开发语言·c++·算法
Kapaseker11 小时前
Kotlin 准备引入 [1,2,3] 创建集合
android·kotlin
吃好睡好便好11 小时前
创建对角矩阵
开发语言·学习·线性代数·算法·matlab·信息可视化·矩阵
码上有光11 小时前
MySQL——复合查询
android·数据库·mysql·期末快速复习
say_fall11 小时前
操作系统与进程核心全解:从冯诺依曼到fork系统调用
android·linux·运维·服务器·学习·ubuntu
诸神黄昏EX11 小时前
Android 性能优化 【总篇:深入浅出】
android
冰暮流星11 小时前
javascript之window对象方法
开发语言·javascript·ecmascript
woniu_buhui_fei11 小时前
JDK8 开发最常用的新特性
java·开发语言
xyq202411 小时前
XML 服务器
开发语言