文章目录
- 一. 顺序结构
- 二. 分支结构
- 1. if 语句
- 2. switch 语句
- 3、循环结构
- 3.1 while 循环
- 3.2 do while 循环
- 3.3 for 循环
- 3.4 break 和 continue
- 三. 输入输出
- 1. 输出到控制台
- 2. 从键盘输入
一. 顺序结构
顺序结构比较简单,即程序按照代码书写的顺序一行一行执行下去。
如果调整代码的书写顺序,则执行顺序也发生变化:
二. 分支结构
1. if 语句
if 语句的基本语法形式包括以下三种:
代码示例
1、判定一个数字是奇数还是偶数
public static void main(String[] args) {
int num = 13;
if (num % 2 == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}
}
2、判定一个整数是正数还是负数
public static void main(String[] args) {
int num = -10;
if (num > 0) {
System.out.println("num 是正数");
} else if (num < 0) {
System.out.println("num 是负数");
} else {
System.out.println("num 是0");
}
}
3、判定某一年份是否是闰年
public static void main(String[] args) {
int year = 2023;
if (year%4 == 0 && year%100 != 0 || year%400 == 0) {
System.out.println("是闰年");
} else {
System.out.println("不是闰年");
}
}
注意事项
1、悬垂 else 问题
- if / else 语句中可以不加花括号,此时只能匹配一条语句
- 不加花括号时 else 总是和最近的 if 匹配
2、代码风格问题
3、分号问题
此处多写了一个分号,导致分号成为了 if 语句的语句体,而 { } 中的代码已经成为了和一个 if 无关的代码块,此时不论 if 成立于否 { } 代码块里的代码都会执行:
int x = 20;
if (x == 10); {
System.out.println("hehe");
}
// 运行结果
hehe
2. switch 语句
语法格式如下:
switch(整数|枚举|字符|字符串) {
case 内容1: {
内容满足时执行语句;
[break;]
}
case 内容2: {
内容满足时执行语句;
[break;]
}
...
default: {
内容都不满足时执行语句;
[break;]
}
}
几点说明
- 根据 switch 中值的不同,会执行对应的 case 语句。遇到 break 就会结束该 switch 语句。
- 如果 switch 中的值没有匹配的 case,就会执行 default 中的语句。
- 建议一个 switch 语句最好都要带上 default
- 注意 long、float、double 和 boolean 这几个基本类型的值不能做 switch 的参数。
代码示例
根据 day 的值输出星期几
int day = 3;
switch(day) {
case 1: {
System.out.println("星期一");
break;
}
case 2: {
System.out.println("星期二");
break;
}
case 3: {
System.out.println("星期三");
break;
}
case 4: {
System.out.println("星期四");
break;
}
case 5: {
System.out.println("星期五");
break;
}
case 6: {
System.out.println("星期六");
break;
}
case 7: {
System.out.println("星期日");
break;
}
default: {
System.out.println("输入有误");
break;
}
}
3、循环结构
3.1 while 循环
循环条件为 true,则执行循环语句,否则结束循环。语法格式如下:
while(布尔表达式){
循环语句;
}
注意事项
- 和 if 类似,while 下面的语句可以不写 { } ,但是不写的时候只能匹配一条语句。建议还是加上 { }
- 和 if 类似,while 后面的 { 建议和 while 写在同一行
代码示例
1、打印 1 - 10 的数字
int num = 1;
while(num <= 10){
System.out.println(num++);
}
2、计算 1 - 100 的和
int num = 1;
int sum = 0;
while(num <= 100){
sum += num;
num += 1;
}
System.out.println(sum);
3、计算 5 的阶乘
int num = 1;
int ret = 1;
while(num <= 5){
ret *= num;
num += 1;
}
System.out.println(ret);
4、计算 1! + 2! + 3! + 4! + 5!
int num = 1;
int sum = 0;
// 外层循环求阶乘的和
while(num <= 5){
// 那内层循环求每一个数的阶乘
int tmp = 1;
int fac = 1;
while(tmp <= num){
fac *= tmp;
tmp += 1;
}
sum += fac;
num += 1;
}
// 最后输出结果
System.out.println(sum);
3.2 do while 循环
语法格式如下,注意最后 while 后面要加个分号
do{
循环语句;
}while(循环条件);
do while 不论条件成立与否,必定先执行一次循环语句,再判定循环条件:
3.3 for 循环
语法格式如下:
for(初始语句; 循环条件; 更新语句) {
循环体;
}
相比于 while 循环,for 循环将初始语句、循环条件 和 更新语句合并在一起,这样写代码时不容易遗漏。
注意事项
- 和 if 类似,for 下面的语句可以不写 { } ,但是不写的时候只能支持一条语句。建议还是加上 { }。
- 和 if 类似,for 后面的 { 建议和 while 写在同一行。
- 建议有确定的循环次数时用 for;必须先执行一次循环体时用 do while;其他情况用 while。
代码示例
1、打印 1 - 10 的数字
for(int i = 0; i <= 10; ++i) {
System.out.println(i);
}
2、计算 1 - 100 的和
int sum = 0;
for(int i = 0; i <= 100; ++i) {
sum += i;
}
System.out.println(sum);
3、计算 5 的阶乘
int ret = 1;
for(int i = 1; i <= 5; ++i){
ret *= i;
}
System.out.println(ret);
4、计算 1! + 2! + 3! + 4! + 5!
int sum = 0;
for(int i = 1; i <= 5; ++i){
int fac = 1;
for(int j = 1; j <= i; ++j){
fac *= j;
}
sum += fac;
}
System.out.println(sum);
3.4 break 和 continue
break
:执行此语句时,退出匹配最近的循环。
continue
:执行此语句时,会立刻进入下次循环(判定循环条件)。
注意:break 和 continue 都必须用在循环中【特殊:beak 还可以用在 switch 中】,二者不适用于 if 语句。
三. 输入输出
1. 输出到控制台
Java 中常用输出语句有以下三种形式:
System.out.print(msg); // 输出一个字符串, 不带换行
System.out.println(msg);// 输出一个字符串, 带换行
System.out.printf(format, msg);// 格式化输出
说明:
- println 输出的内容自带 \n,print 不带 \n
- printf 的格式化输出方式和 C 语言的 printf 是基本一致的
2. 从键盘输入
我们在做 OJ 时经常要用到从键盘输入 n 组数据,模板大致如下:
注意事项
- 使用 Scanner 需要导入 util 包
- 当循环输入多个数据的时候,使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z,Linux / Mac 上使用 ctrl +d)