{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# AP CSA Demo — 普林斯顿 algs4 库(JAVA)\n", "\n", "这是 MVP 示例:教你如何用 **jjava (Java kernel)** 加载普林斯顿 `algs4.jar`,实现 **科学绘图 (StdDraw)** 和 **音频 (StdAudio)**。\n", "\n", "> algs4.jar 官方地址:https://algs4.cs.princeton.edu/code/algs4.jar" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 第 1 步:加载 algs4.jar(每个 notebook 首格执行一次)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%classpath add /opt/tljh/user/share/java/algs4.jar\n", "\n", "import edu.princeton.cs.algs4.StdOut;\n", "import edu.princeton.cs.algs4.StdDraw;\n", "import edu.princeton.cs.algs4.StdAudio;\n", "\n", "StdOut.println(\"algs4 加载成功!\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 第 2 步:科学绘图 — StdDraw 画一个函数曲线\n", "\n", "服务器无显示器 (headless),所以我们**离屏渲染后保存为 PNG**,再用 Markdown 显示。" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "// 离屏绘图:sin 曲线\n", "int n = 100;\n", "StdDraw.setCanvasSize(600, 400);\n", "StdDraw.setXscale(0, n);\n", "StdDraw.setYscale(-1.5, 1.5);\n", "StdDraw.setPenColor(StdDraw.BLUE);\n", "for (int i = 0; i < n; i++) {\n", " double x0 = i, y0 = Math.sin(i * 0.1);\n", " double x1 = i + 1, y1 = Math.sin((i + 1) * 0.1);\n", " StdDraw.line(x0, y0, x1, y1);\n", "}\n", "StdDraw.setPenColor(StdDraw.RED);\n", "StdDraw.text(n / 2.0, 1.2, \"y = sin(x)\");\n", "\n", "StdDraw.save(\"sin_plot.png\"); // 保存到当前目录\n", "StdOut.println(\"已保存 sin_plot.png\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 显示绘图结果" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![sin曲线](sin_plot.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 第 3 步:音频 — StdAudio 合成一段旋律(八音盒)\n", "\n", "服务器无声卡,所以**合成样本保存为 WAV**,学生用浏览器 `