一. 顺序结构
顺序结构比较简单,即程序按照代码书写的顺序一行一行执行下去。
如果调整代码的书写顺序,则执行顺序也发生变化:
二. 分支结构
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 的阶乘
i
nt 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)