Dart自定义栈如何打印最后元素?解决[]运算符未定义报错
解决CustomStack无法使用索引访问的问题
你遇到的错误是因为CustomStack类没有实现[]索引运算符,所以无法直接通过plates[plates.length-1]的方式访问元素。要打印栈顶的“Plate Extra”,有以下几种方案:
方案1:直接使用已有的top属性(推荐)
你的CustomStack已经定义了top getter,它直接返回栈顶元素(也就是列表的最后一个元素),完全符合你的需求,直接调用即可:
void main() { CustomStack<String> plates = CustomStack(); plates.push("Plate1"); plates.push("Plate2"); plates.push("Plate3"); plates.push("Plate Extra"); print(plates); print(plates.top); // 直接输出Plate Extra }
方案2:实现[]索引运算符
如果希望支持像普通列表一样用索引访问元素,可以在CustomStack类中添加operator []方法:
class CustomStack<T> { final _list = <T>[]; void push(T value) => _list.add(value); T pop() => _list.removeLast(); T get top => _list.last; bool get isEmpty => _list.isEmpty; bool get isNotEmpty => _list.isNotEmpty; int get length => _list.length; @override String toString() => _list.toString(); // 添加索引运算符重载 T operator [](int index) { // 可选:添加越界检查,避免运行时错误 if (index < 0 || index >= _list.length) { throw RangeError.index(index, _list, "index", "索引超出范围"); } return _list[index]; } }
修改后,原来的print(plates[plates.length-1])就能正常运行,输出“Plate Extra”。
方案3:添加自定义的元素获取方法
如果不想重载运算符,也可以添加一个专门的方法来获取指定索引的元素:
class CustomStack<T> { final _list = <T>[]; void push(T value) => _list.add(value); T pop() => _list.removeLast(); T get top => _list.last; bool get isEmpty => _list.isEmpty; bool get isNotEmpty => _list.isNotEmpty; int get length => _list.length; @override String toString() => _list.toString(); // 自定义元素获取方法 T getElementAt(int index) { if (index < 0 || index >= _list.length) { throw RangeError.index(index, _list, "index", "索引超出范围"); } return _list[index]; } }
使用时调用print(plates.getElementAt(plates.length-1))即可。
内容的提问来源于stack exchange,提问作者Ayz
相关产品推荐
相关产品推荐

