WMX · 随记
·Java· 3 分钟阅读

循环边界:半开区间为什么容易组合

遍历数组时多写一个等号,就会在最后一步越界。分页、切片和批处理也有类似问题:区间的端点究竟包含在内,必须说清楚。

▶ 本文含视频讲解
▶ 教学视频手动播放 · 英语讲解

Java Tutorial for Beginners

Java 基础课程作为语言背景复习;本文的特定 API、版本行为和边界条件以正文及文档为准。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。

播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。

Java 系列概览:类型与值、状态与资源、边界验证
Java 系列概览:类型与值、状态与资源、边界验证 点击图片查看大图 ↗

问题从哪里出现

遍历数组时多写一个等号,就会在最后一步越界。分页、切片和批处理也有类似问题:区间的端点究竟包含在内,必须说清楚。

理解核心机制

用 [start, end) 表示区间时,长度等于 end-start,相邻区间可以直接拼接。数组常见写法是 i < length;从零开始并不是唯一选择,关键是区间约定一致。

动手做一个小实验

Java 17 或更新版本;将示例保存为 Demo.java,执行 javac Demo.java 后运行 java Demo。

Java11 行 · 可横向滚动
public class Demo {
    public static void main(String[] args) {
        int[] values = {3, 5, 8};
        int sum = 0;
        for (int i = 0; i < values.length; i++) {
            sum += values[i];
        }
        System.out.println(sum);
        System.out.println(java.util.Arrays.copyOfRange(values, 1, 3).length);
    }
}

适用边界与常见误区

数组长度为零时也要成立。反向循环尤其要留意有符号整数与结束条件,切片 API 的越界策略也不都相同,应阅读具体方法约定。

继续练习

对长度为 0、1、3 的数组执行同一算法。把遍历拆成 [0, mid) 与 [mid, length),确认没有遗漏或重复。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档