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

2. 关于this关键字#

a. 一些bug排查#

1. IntellJ IDE无法提供基本代码提示(像 String, public, List 这种 Java 核心库和关键字)#

这个问题在没网的lab真的很抓狂,经过检查是第三种错误,没有添加Sources Root文件夹。

1. 检查是否开启了 “省电模式” (Power Save Mode)#

这是最常见但也最容易被忽视的原因。如果开启了这个模式,IDE 会关闭所有的自动代码分析和提示以节省电量。

  • **检查方法:**看 IDE 窗口右下角是否有一个带着小电池图标的标志,或者直接去菜单栏检查。
  • 操作: 点击 File (文件) -> 确认 Power Save Mode 没有被勾选。

2. 检查 Project SDK (JDK) 是否配置#

如果 IDE 不知道你用的是哪个版本的 Java,它就无法加载 String 这些基础类,自然也就没有提示。

  • 操作:
    1. 按快捷键 Ctrl + Alt + Shift + S (或者点击 File -> Project Structure)。
    2. 在左侧选择 Project
    3. 查看 SDK 这一栏。如果是 <No SDK> 或者红色的,说明这就因。
    4. 解决: 下拉选择一个你本地安装的 JDK(Lab 电脑上通常会预装)。如果列表里没有,点击 Add SDK -> JDK,然后找到电脑上安装 JDK 的目录(通常在 C:\Program Files\Java\.../usr/lib/jvm/...)。

3. 检查 “Sources Root” (源代码根目录)#

这是新手最容易遇到的坑。如果你的 Java 文件所在的文件夹图标是灰色的(普通文件夹),而不是蓝色的(Source Root),IDE 就不会去编译和分析里面的代码。

  • 现象: 打开 Java 文件,发现左上角的图标是一个橘红色的 ‘J’ 都在圆圈里,或者文件内容全是白色,关键字没有变色高亮。
  • 解决:
    1. 在左侧项目视图(Project View)中,找到你存放代码的文件夹(比如 src)。
    2. 右键点击 该文件夹。
    3. 选择 Mark Directory as (将目录标记为) -> Sources Root
    4. 此时文件夹图标应该变蓝,代码提示通常会立即恢复。
  • 进阶:
    1. 如果还是不行,按下快捷键 Ctrl + Alt + Shift + S
    2. 在左侧选择 Modules
    3. 选择 新建模块 (New Module)
    4. 之后再按照上面标记为源代码根目录。

b. java语言切换#

Java 安装包本身通常不分“中文版”或“英文版”。Java 虚拟机 (JVM) 会自动读取你的操作系统语言设置(Locale)。如果你的 Windows 是中文环境,Java 输出(如报错信息、java -version 信息)通常会自动显示为中文。

永久切换:

[System.Environment]::SetEnvironmentVariable("JAVA_TOOL_OPTIONS", "-Duser.language=en -Duser.country=US", "User")
powershell

当前会话临时切换:

$env:JAVA_TOOL_OPTIONS = "-Duser.language=en -Duser.country=US"
powershell

恢复默认:

[System.Environment]::SetEnvironmentVariable("JAVA_TOOL_OPTIONS", $null, "User")
powershell

指定中文:

[System.Environment]::SetEnvironmentVariable("JAVA_TOOL_OPTIONS", "-Duser.language=zh -Duser.country=CN", "User")
powershell
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日