Zikai‘s Blog

Back

CS2030DE笔记-Programming Methodology IIBlur image

2026春季学期在新加坡国立大学交换,上了CS2030DE-Programming Methodology II。主要是通过Java将一些软件工程的基础,比如继承,接口,泛型之类的知识。虽然我好像也不会太用到Java(我目前更喜欢Go),但是这也估计是本科四年里难得正儿八经上的编程课。

这个课程笔记主要记录初学Java的一些报错,希望以后能注意到。

1. 关于java.util.ArrayList#

ArrayList<Double> normalized_data = new ArrayList<>(listlen);
for (int i = 0; i < listlen; i++) {
    normalized_data.set(i, ...); // 这里报错!
}
java

开始误以为:new ArrayList<>(listlen) 创建了一个长度为 listlen 的数组。

实际上:括号里的 listlen 只是 初始容量 (Initial Capacity),它告诉 Java “请预留这么多空间”。此时 ArrayList实际大小 (size) 仍然是 0。在 Java 中,你不能 set 一个尚未存在的位置。

解决方法:使用 add()

ArrayList<Double> normalized_data = new ArrayList<>(listlen); // 预留空间是个好习惯
for (int i = 0; i < listlen; i++) {
    double value = (data.get(i) - mean) / std;
    normalized_data.add(value); // 使用 add() 自动增加 size
}
plaintext
CS2030DE笔记-Programming Methodology II
https://astro-pure.js.org/blog/cs2030de/cs2030de%E7%AC%94%E8%AE%B0
Author Skywalker
Published at 2026年1月31日