1.1. 选择结构
1.1.1. if 语句
if语句通过判断判断条件是否满足,将程序的执行路径分为两条。
int x = 1;
if (x==1)
System.out.println("1");
//以下是错误的
if (x)
System.out.println("1");
汇总
//格式一
if (判断条件){
执行语句
}
//格式二
if (判断条件){
执行语句1
...
}
else{
执行语句2
...
}
//格式三
if (判断条件1) {
执行语句1
}
else if (判断条件2) {
执行语句2
}
...
else if (判断条件n) {
执行语句n
}
else {
执行语句n+1
}
例
- 编写一个程序,从键盘输入三个互不相同的整数,要求按输出其中第二大数
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入三个互不相同的整数:");
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
int num3 = scanner.nextInt();
// 如果输入的数字已经排序,我们不需要进一步比较
if (num1 < num2 && num2 < num3) {
System.out.println("第二大的数是: " + num2);
} else if (num1 < num3 && num3 < num2) { // 或者 num3 < num1 和 num1 < num2
System.out.println("第二大的数是: " + num3);
} else { // num1 和 num2 是最大值,num3 是第二大的
System.out.println("第二大的数是: " + num1);
}
scanner.close();
}
}
在Java中,
Scanner scanner = new Scanner(System.in)
这行代码的作用是创建一个Scanner
对象,用于从标准输入(通常是键盘)读取数据。System.in
是一个内置流,表示程序的标准输入源,所以当你创建一个Scanner
对象并传入System.in
时,你可以使用这个scanner
对象来接收用户在控制台输入的数据。例如,你可以使用
scanner.nextInt()
来获取用户输入的一个整数,scanner.nextLine()
来获取一行文本,等等。这是处理命令行交互或用户输入常见的做法。
1.1.2. switch语句
switch是多分支结构,实现“多选一”功能,该语句由一个控制表达式和多个case标签组成
表达式的值支持的数据类型:byte、short、char、int、枚举类型、String
case子句中的 常量值1、常量值2、常量值3、常量值4等必须是常量,对应的常量值1到常量值n必须是与之相对应的byte、short、char、int型常量,枚举类型常量,String常量,而且必须互不相同。
switch语句首先计算表达式的值,如果表达式的值和某个case后面的常量值相等,就执行该case里的若干个语句直到碰到break语句为止。如果某个case中没有使用break语句,一旦表达式的值和该case 后面的常量值相等,程序不仅执行该case里的若干个语句,而且继续执行后继的case里的若干个语句,直到碰到break语句为止。
若switch语句中的表达式的值不与任何case的常量值相等,则执行default后面的若干个语句。
String.valueOf(w) 的功能是把整数w转换成字符串(w -> "w")
现在的简易写法
Scanner input = new Scanner(System.in);
System.out.print("输入一个季节1---4:");
int season = input.nextInt();
switch (season) {
case 1 -> System.out.println("春");
case 2 -> System.out.println("夏");
case 3 -> System.out.println("秋");
case 4 -> System.out.println("冬");
default ->
System.out.println("季节输入非法.");
}
1.1.3. switch表达式
编写程序,从键盘输入一个年份(如2019 年)和一个月份(如2月),输出该月的天数(28)
Scanner input = new Scanner(System.in);
System.out.print("输入一个年份:");
int year = input.nextInt();
System.out.print("输入一个月份:");
int month = input.nextInt();
int numDays = switch (month) {
case 1, 3, 5, 7, 8, 10, 12 -> 31;
case 4, 6, 9, 11 -> 30;
// 对2月需要判断是否是闰年
case 2 -> {
if (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0))
yield 29;
else
yield 28;
}
default -> 0;
};
System.out.println("该月的天数为:" + numDays);
注意:
yield 语句用于返回一个值,并跳出当前 switch 语句块。
使用 yield 语句时,表示将后面的数值做为返回值,相当于 return 的功能,但不能使用 return 关键字,如果在
case
中使用return
,则会立即退出当前的控制流程,导致无法执行后续的case
或执行default
部分。
1.2. 循环语句
当解决具有规律性的需要重复操作的问题时,某些语句需要重复执行直至条件终止,这组被重复执行的语句称为循环体。
常见的循环语句包括:for循环、while循环、do-while循环
1.2.1. for循环
在已知循环的初始值和终止值的条件下使用,其格式如下:
for(表达式1;表达式2;表达式3){
循环体
}
//表达式1 用于初始化循环变量和其他变量初始化工作
//表达式2 返回布尔值的条件表达式,用于判断循环是否继续
//表达式3 调整循环变量,改变循环条件
for循环的执行过程:
- 先执行初始化部分(表达式1),该部分仅在循环开始时执行一次,以后不再使用
- 然后判断循环的条件(表达式2),条件成立时执行循环体,条件不成立结束for循环
- 最后更新循环变量的值
- 总结
- 先执行表达式 1 的语句
- 判断表达式是否为真
- 为真,则执行循环
- 循环结束后,更新循环变量的值
- 为假,则退出循环
循环的嵌套
用嵌套的for循环打印输出如下图形。这里,第一行输出一个星号,第二行输出3个星号,…,第8行输出15个星号。
*
***
*****
*******
*********
***********
*************
***************
public static void main(String[] args) {
for (int n = 1; n <= 8; n++) {
for (int k = 0; k < (8 - n); k++) {
System.out.print(" "); //输出前导空格
}
for (int j = 1; j <= (2 * n - 1); j++) {
System.out.print("*"); // 输出星号
}
System.out.println(); // 换行
}
}
1.2.2. while循环结构
执行while语句,当它的条件表达式为真时,while语句会重复执行一个执行语句或者语句块,其格式如下:
while(条件表达式){
执行语句
}
while语句执行前先判断条件表达式的值,值为真则执行循环体内的执行语句,循环体执行完毕后无条件再次进行条件表达式的判断。
如果判断条件表达式的值为假,则跳过循环体转为执行while后面的语句,反之,如果判断条件表达式的值为真,则继续下一轮循环。
例
用while语句计算1/0!+1/1!+1/2!+1/3!+...的前20项的和
public static void main(String[] args) {
double sum = 0, item = 1;
int i = 0, n = 20;
while (i < n) {
sum = sum + item;
item = 1.0 * item / ++i;
}
System.out.println("i=" + i + ",sum=" + sum);
}
//i=20,sum=2.7182818284590455
1.2.3. do-while循环结构
do-while和while循环的区别是,do-while的循环体至少被执行了一次,其结构如下
do{
若干语句;
}
while(条件表达式);
计算s=1+3+5+...+99用while循环实现如下:
int n=1,sum=0;
while(n<=99){
sum+=n;
n+=2;
}
System.out.println("sum="+sum);
用do-while循环语句实现如下:
do{
sum+=n;
n+=2;
}while(n<=99);
System.out.println("sum="+sum);
1.2.4. break和continue语句
break和continue是用关键字break和continue加上分号构成的语句
break;
continue;
区别
break语句的功能对各种循环均直接退出,不再计算循环控制表达式
continue语句与break语句类似,但它只终止执行当前的循环,从下一次循环开始