介绍
在本实验中,我们学习了 Java 的基本数据类型和运算符。在本实验中,我们将开始学习编写面向过程的程序。主要内容是使用控制结构的范式:条件表达式。
在本实验中,我们学习了 Java 的基本数据类型和运算符。在本实验中,我们将开始学习编写面向过程的程序。主要内容是使用控制结构的范式:条件表达式。
为了编写有用的程序,我们几乎总是需要检查条件并根据条件改变程序的行为。条件语句为我们提供了这种能力。
最简单的形式是 if-else 语句:
示例:
在 /home/labex/project/ifelseTest.java
文件中编写以下代码:
public class ifelseTest{
public static void main(String[] args){
int x = 1;
if (x > 0) {
System.out.println("x is positive");
}
else{
System.out.println("x is non-positive");
}
}
}
输出:
在终端中使用以下命令运行 ifelseTest.java
文件:
javac /home/labex/project/ifelseTest.java
java ifelseTest
查看输出:
x is positive
括号中的表达式称为条件。如果条件为真,则执行 if
后面大括号中的语句。如果条件不为真,则执行 else
后面大括号中的语句。如果没有 else
且 if
条件为假,则执行 if-else 后面的语句(如果有)。条件可以包含任何比较运算符,也称为关系运算符:
示例:
if (x == y){ } // x 等于 y
if (x != y){ } // x 不等于 y
if (x > y) { } // x 大于 y
if (x < y) { } // x 小于 y
if (x >= y){ } // x 大于或等于 y
if (x <= y){ } // x 小于或等于 y
尽管这些操作你可能已经很熟悉,但 Java 使用的语法与数学符号(如 =、≠ 和 ≤)略有不同。一个常见的错误是使用单等号(=
)而不是双等号(==
)。请记住,=
是赋值运算符,而 ==
是比较运算符。此外,没有 =<
或 =>
这样的符号。
条件运算符的两边必须是相同类型。你只能将 int 与 int 比较,double 与 double 比较。==
和 !=
运算符可以用于 String
,但它们的行为可能与你预期的不一致。而且,其他关系运算符根本不能用于字符串。
例如:如果 x
除以 2
的余数为 0
,那么我们知道 x
是偶数,这段代码会打印相应的消息。如果条件为假,则执行第二个打印语句。由于条件必须为真或假,因此只会执行其中一个分支。如果你认为你可能需要经常检查数字的奇偶性,你可能希望将这段代码“封装”到一个方法中,如下所示:
示例:
在 /home/labex/project/conditionTest.java
文件中编写以下代码:
public class conditionTest
{
public static void printParity(int x) {
if (x%2 == 0) {
System.out.println(x + " is even");
} else {
System.out.println(x + " is odd");
}
}
public static void main(String[] args){
printParity(17);
printParity(18);
}
}
输出:
在终端中使用以下命令运行 conditionTest.java
文件:
javac /home/labex/project/conditionTest.java
java conditionTest
查看输出:
17 is odd
18 is even
现在你有了一个名为 printParity
的方法,它可以为你提供的任何整数打印适当的消息。在 main
中,你可以调用这个方法。请记住,当你调用一个方法时,你不需要声明你提供的参数的类型。Java 可以推断出它们的类型。你应该抵制编写类似 printParity(int 3)
的诱惑。此外,你还可以将一个条件嵌套在另一个条件中。
示例:
在 /home/labex/project/nestedConditionTest.java
文件中编写以下代码:
public class nestedConditionTest{
public static void main(String[] args){
int x = 0; // 你可以尝试 x = 1, x = -1
if (x == 0) {
System.out.println("x is zero");
}
else {
if (x > 0) {
System.out.println("x is positive");
}
else {
System.out.println("x is negative");
}
}
}
}
输出:
在终端中使用以下命令运行 nestedConditionTest.java
文件:
javac /home/labex/project/nestedConditionTest.java
java nestedConditionTest
查看输出:
x is zero
现在有一个外部条件,它包含两个分支。第一个分支包含一个简单的打印语句,但第二个分支包含另一个条件语句,它也有自己的两个分支。这两个分支都是打印语句,但它们也可以是条件语句。
缩进有助于使结构美观且易于理解,但嵌套条件语句很快就会变得难以阅读。尽量避免使用它们。另一方面,这种嵌套结构很常见,我们还会再次看到它。所以,你最好习惯它。
Switch-case 语句是另一种条件表达式。Switch-case 语句的语法如下:
示例:
// value 类型可以是 byte、short、int、char、String,但不能是 long 类型。
switch (变量或值表达式)
{
// case 值必须是常量值
case value1:
// 代码
;
case value2:
// 代码
;
default:
// 代码
;
}
示例:
在 /home/labex/project/switchTest.java
文件中编写以下代码:
public class switchTest
{
public static void main(String[] args){
// 你可以将 i 改为 2,然后再次尝试
int i = 2;
switch(i)
{
case 1:
System.out.println(1);
break;
case 2:
System.out.println(2);
// 如果没有 break 语句,有时你会得到一个令人困惑的结果。
// 你可以尝试删除 break 语句,看看会发生什么。
break;
// 如果以上都不匹配,则执行 default 语句
default:
System.out.println("default");
break;
}
}
}
输出:
在终端中使用以下命令运行 switchTest.java
文件:
javac /home/labex/project/switchTest.java
java switchTest
查看输出:
2
在本实验中,我们学习了条件表达式以及两种条件语句的写法。它们对编程非常有用。在下一个实验中,我们将学习另一种控制结构:递归和循环。