Skip to content

第 1 章 程序入门:和机器人说的第一句话​

约 2388 个字 93 行代码 预计阅读时间 9 分钟

阅读目标了解为什么 Java 是 FTC 控制系统的首选语言。能够独立编写、编译并运行一个最简单的 Java 程序。理解 Java 程序的编译和执行流程。掌握最常用的算术运算符。

阅读目标

  • 了解为什么 Java 是 FTC 控制系统的首选语言。

  • 能够独立编写、编译并运行一个最简单的 Java 程序。

  • 理解 Java 程序的编译和执行流程。

  • 掌握最常用的算术运算符。

  • 1.1 你的第一个 Java 程序:Hello, FTC!1.1.1 编写你的第一个指令1.1.2 程序是如何运行的?

  • 1.1.1 编写你的第一个指令

  • 1.1.2 程序是如何运行的?

  • 1.2 让机器人学会计算1.2.1 认识基本的算术运算符

  • 1.2.1 认识基本的算术运算符

欢迎来到 FTC Java 编程的世界!

你可能想问,我们为什么要学习 Java 呢?

想象一下,你想让机器人前进、后退、举起手臂,你该怎么告诉它呢?你不能直接对它说中文,因为它听不懂。机器人和它内部的计算机,只懂一种由“0”和“1”组成的语言。

而 Java,就是一种我们和计算机(以及机器人)之间沟通的“桥梁语言”。它既像我们平时说话的逻辑,容易理解,又可以被“翻译”成计算机能懂的指令。学习 Java,就是学习如何精确、无歧义地给机器人下达指令,让它成为你可靠的伙伴!

IMPORTANT

在 FTC 竞赛中,Java 是官方指定的编程语言,从机器人主控到我们编写的控制程序,整个体系都构建在 Java 之上。所以,掌握 Java 是我们迈向成功的第一步!

1.1 你的第一个 Java 程序:Hello, FTC!​

在学习任何编程语言时,传统上我们做的第一件事,都是让电脑在屏幕上显示 “Hello, World!”。这就像是和这个新世界打的第一个招呼。今天,我们来跟 FTC 世界打个招呼!

1.1.1 编写你的第一个指令​

下面就是一个最简单的 Java 程序。它的唯一任务,就是在控制台(一个用来显示程序输出信息的窗口)打印出 "Hello, FTC!"。

/**
 * 这是一个 HelloWorld 程序,是每个程序员的起点。
 * public class HelloWorld 定义了一个“类”,你可以把它想象成是这个程序蓝图的名字。
 * 在 Java 中,所有的代码都必须放在一个类(class)里面。
 * 重要:这个类名 HelloWorld 必须和你的文件名 HelloWorld.java 完全一样!
 */
public class HelloWorld {

    /**
     * 这是程序的主方法(main method),也是程序的唯一入口。
     * 就像一个建筑的正门,程序会从这里开始执行里面的代码。
     * public static void main(String[] args) 是固定写法,目前你只需要记住它。
     */
    public static void main(String[] args) {
        // 这行代码是真正执行动作的指令。
        // System.out.println(...) 的作用就是在控制台打印出括号里用双引号括起来的文字,
        // 然后移动到下一行,为下一次打印做准备。
        System.out.println("Hello, FTC!");
    }
}

1.1.2 程序是如何运行的?​

你可能会好奇,我们写的HelloWorld.java文件,计算机是如何把它变成屏幕上的一行字的?这个过程分为两步:编译和运行。

  • 编译 (Compile)我们写的.java文件(称为源文件)充满了人类可读的文字和符号。但是,计算机的中央处理器(CPU)并不直接认识这些。我们需要一个叫做“编译器”(Compiler)的工具,它会把我们的HelloWorld.java文件翻译成一种叫做“字节码”(Bytecode)的东西,并存为一个新的文件HelloWorld.class。字节码不是给 CPU 看的,而是专门给 Java 虚拟机(JVM)看的。你可以把它想象成一种只有 JVM 能看懂的“中间语言”。

编译 (Compile)

  • 我们写的.java文件(称为源文件)充满了人类可读的文字和符号。但是,计算机的中央处理器(CPU)并不直接认识这些。

  • 我们需要一个叫做“编译器”(Compiler)的工具,它会把我们的HelloWorld.java文件翻译成一种叫做“字节码”(Bytecode)的东西,并存为一个新的文件HelloWorld.class。

  • 字节码不是给 CPU 看的,而是专门给 Java 虚拟机(JVM)看的。你可以把它想象成一种只有 JVM 能看懂的“中间语言”。

  • 运行 (Run)Java 最强大的地方在于它的“一次编译,到处运行”特性。这就要归功于Java 虚拟机 (JVM)。JVM 是一个虚拟的电脑,它安装在我们的操作系统(比如 Windows、Android)之上。当我们运行程序时,实际上是启动了 JVM。JVM 会加载.class字节码文件,然后把它解释成当前操作系统(比如机器人主控里的 Android 系统)的 CPU 能够理解的机器指令。最后,JVM 会找到我们程序里约定的入口——main方法,从这里开始执行里面的代码,于是System.out.println("Hello, FTC!");就被执行了,你在控制台上就看到了结果。

运行 (Run)

  • Java 最强大的地方在于它的“一次编译,到处运行”特性。这就要归功于Java 虚拟机 (JVM)。

  • JVM 是一个虚拟的电脑,它安装在我们的操作系统(比如 Windows、Android)之上。当我们运行程序时,实际上是启动了 JVM。

  • JVM 会加载.class字节码文件,然后把它解释成当前操作系统(比如机器人主控里的 Android 系统)的 CPU 能够理解的机器指令。

  • 最后,JVM 会找到我们程序里约定的入口——main方法,从这里开始执行里面的代码,于是System.out.println("Hello, FTC!");就被执行了,你在控制台上就看到了结果。

总结一下

整个流程是:程序员编写 .java 文件->编译器编译成 .class 字节码文件->JVM 解释 .class 文件->操作系统执行指令。

常见错误

  • 文件名和类名不匹配: 如果你的文件保存为MyProgram.java,那么代码里必须是public class MyProgram。两者大小写也必须完全一致!

  • 大小写搞混: Java 是一个对大小写非常敏感的语言。System不能写成system,String也不能写成string。

  • 遗漏分号;: 在 Java 中,每个独立的指令结束时,都必须有一个英文分号。这就像我们写完一句话要加句号一样。

  • 使用中文符号: 代码中所有的括号()、花括号{}、双引号""和分号;都必须是英文半角符号。输入法一定要切换到英文状态!

想一想

  • 问:println和print有什么区别?

  • 答:println是 "print line"(打印一行)的缩写,它会在打印完指定内容后自动换行。而print只会打印内容,光标会停留在内容的末尾,不会换行。你可以把上面代码中的println改成print试试看,观察一下有什么不同!

📝小练习 1

题目: 请你创建一个新的 Java 程序,修改代码,让它在控制台打印出 “我的第一个FTC程序!”。

提示:

  • 新建一个 Java 文件,例如MyFirstFtcProgram.java。

  • 记得把类名也改成MyFirstFtcProgram。

  • 修改System.out.println()括号里的文字。

参考答案:

/**
 * 练习题:创建一个程序来打印自定义的中文消息。
 */
public class MyFirstFtcProgram {
    public static void main(String[] args) {
        // 将 "Hello, FTC!" 替换成我们想要打印的任何内容。
        System.out.println("我的第一个FTC程序!");
    }
}

1.2 让机器人学会计算​

程序除了能显示文字,更强大的地方在于它能进行计算。我们可以利用 Java 的算术运算符,让机器人为我们处理各种数学问题。

1.2.1 认识基本的算术运算符​

类别 符号 示例 说明
+ a + b 数值相加或拼接字符串
- a - b 数值相减
* a * b 数值相乘
/ a / b 整数相除,结果只保留整数部分
取模 % a % b 计算除法的余数

代码示例:

/**
 * 这个程序演示了 Java 中基本的算术运算。
 */
public class SimpleCalculator {
    public static void main(String[] args) {
        // 为了方便演示,我们先创建两个整数变量(可以想象成带标签的盒子)
        // int a = 10; 的意思是:创建一个叫 a 的整数盒子,并把 10 放进去。
        int a = 10;
        int b = 3;

        // 使用 "+" 运算符进行加法
        System.out.println("a + b = " + (a + b)); // 输出 a + b = 13

        // 使用 "-" 运算符进行减法
        System.out.println("a - b = " + (a - b)); // 输出 a - b = 7

        // 使用 "*" 运算符进行乘法
        System.out.println("a * b = " + (a * b)); // 输出 a * b = 30

        // 使用 "/" 运算符进行除法
        // 注意!两个整数相除,结果也是整数,小数部分会被直接丢掉!
        System.out.println("a / b = " + (a / b)); // 输出 a / b = 3, 而不是 3.333...

        // 使用 "%" 运算符取模(取余数)
        // 10 除以 3,商是 3,余数是 1
        System.out.println("a % b = " + (a % b)); // 输出 a % b = 1
    }
}

注意整数除法

  • 整数除法的陷阱:10 / 3在数学上约等于3.33,但在 Java 的整数运算中,结果是3。小数部分会被无情地舍弃,而不是四舍五入!

  • 除数不能为零:a / 0或者a % 0是一个严重的数学错误,会导致你的程序立刻崩溃并报错 (ArithmeticException)!在控制机器人时要绝对避免这种情况。

  • 忘记运算优先级: Java 和数学一样,遵循“先乘除(*,/,%),后加减(+,-)”的规则。如果不确定,就用括号()把你希望先计算的部分括起来,例如(a + b) * c。

取模 % 有什么用?

  • 问: 取模%运算到底有什么用?看起来好像不常用。

  • 答:a % b非常有用!最常见的用途是判断奇偶性:一个数 % 2如果结果是0,说明它是偶数;如果是1,说明它是奇数。在FTC中,我们还可以用它来让机器人的动作呈现周期性变化,比如一个舵机在 3 个位置之间循环摆动。

📝小练习 2

题目: 编写一个程序,让用户可以从键盘输入两个整数,然后程序计算并打印出这两个数字的加、减、乘、除、取模的结果。

如何从键盘读取用户输入?

我们需要一个叫Scanner的工具。使用它分为三步:

  • 在文件的最顶端,public class ...的上一行,写import java.util.Scanner;来导入这个工具。

  • 在main方法里,写Scanner sc = new Scanner(System.in);来创建一个Scanner的实例。

  • 当需要读取一个整数时,写int a = sc.nextInt();即可。程序会在这里暂停,等待用户输入一个数字并按回车。 如果是需要读取一个浮点数和字符串呢?则需要使用double a = sc.nextDouble();和String a = sc.nextLine();。

示例交互:

请输入第一个整数 a:
10
请输入第二个整数 b:
3
10 + 3 = 13
10 - 3 = 7
10 * 3 = 30
10 / 3 = 3
10 % 3 = 1

参考答案:

// 1. 导入 Scanner 工具
import java.util.Scanner;

/**
 * 练习题:一个可以接收用户输入的交互式计算器。
 */
public class InteractiveCalculator {
    public main(String[] args) {
        // 2. 创建一个 Scanner 实例,让它可以读取键盘输入
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入第一个整数 a:");
        // 3. 读取用户输入的第一个整数,并存到变量 a 中
        int a = sc.nextInt();

        System.out.println("请输入第二个整数 b:");
        // 4. 读取用户输入的第二个整数,并存到变量 b 中
        int b = sc.nextInt();

        // 打印所有运算结果
        System.out.println(a + " + " + b + " = " + (a + b));
        System.out.println(a + " - " + b + " = " + (a - b));
        System.out.println(a + " * " + b + " = " + (a * b));
        System.out.println(a + " / " + b + " = " + (a / b));
        System.out.println(a + " % " + b + " = " + (a % b));
    }
}

本章小结

  • Java 是我们和 FTC 机器人沟通的官方语言,是编程学习的基础。

  • 所有 Java 程序都有一个main方法作为入口;我们使用System.out.println()来输出信息。

  • Java 程序经历“编译”和“运行”两个阶段,JVM 是实现跨平台运行的关键。

  • 我们学会了使用+ - * / %这五个基本的算术运算符,这是所有复杂算法的基石。

  • 通过Scanner,我们的程序可以和用户进行交互,变得更加灵活。

颜色主题调整