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