流程控制分类
流程控制:通过语句,控制程序的执行流程
- 顺序结构
- 分支结构(if switch)
- 循环结构(for while do-while)
分支结构
if结构
if(条件表达式){
语句块;
}
- 若语句体中只有一条语句,那么大括号
{}
可以省略不写(尽量不要不写,有的语句可能会被当作两条)
if(条件表达式){
语句块1;
}else{
语句块2;
}
- 条件为真,执行语句块1,否则执行语句块2
if(条件表达式){
语句块1;
}else if(条件表达式2){
语句块2;
}else if(条件表达式3){
语句块3;
}......
else{
语句块n;
}
Switch结构
switch(表达式){
case 值1:
语句块1;
break
case 值2:
语句块2;
break;
......
default:
语句块n;
break;
}
- 表达式:取值为
byte short int cha 枚举
String` - case:被匹配的值
- break:中断switch语句,取消后续匹配
- default:不符合所有case时默认语句
- case的值不可重复
case穿透
当其中一个case没有写break的时候,会发生case穿透,后续的case不再具有匹配效果,而会直接运行其代码块的语句,直到遇到break停下来。
利用这个原理,可以对case进行合并
static void Score(){
Scanner scan = new Scanner(System.in);
while (true) {
System.out.print("请输入成绩");
int number = scan.nextInt();
switch (number / 10) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("成绩不合格,继续努力!");
break;
case 6:
case 7:
case 8:
case 9:
case 10:
System.out.println("成绩合格!继续保持!");
break;
default:
System.out.println("输入不合法,请重试");
}
}
}
当输入一个50后,会从0开始向下穿透,符合5,则输出信息,停止后续匹配,实现case的合并
若多个case需要执行相同的语句,可以考虑使用case穿透
循环结构
for循环
循环:重复执行语句
for(初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
输出1~100所有整数和
public class 循环输出100内偶数和 {
public static void main(String[] args) {
int sum = 0;
for (int i = 0; i < 100; i++) {
if (i % 2 == 0) {
sum = sum + i;
}
}
System.out.println("100内所有的偶数和为:" + sum);
}
}
最大公约数和最小公倍数
import java.util.Scanner;
public class 求最大公约数和最小公倍数 {
public static void main(String[] args) {
int m,n,gys=0,gbs=0;
Scanner scan = new Scanner(System.in);
System.out.print("请输入第一个整数:");
m = scan.nextInt();
System.out.print("请输入第二个整数:");
n = scan.nextInt();
int big = (m>n)?m:n;
int small=(m>n)?n:m;
//最大公约数
for (int i=small;i>=1;i--){
if (m % i == 0 && n % i == 0){
gys = i;
break;
}
}
//最小公倍数
for (int i = big;i< m * n ; i++ ){
if (i % m == 0 && i % n == 0){
gbs = i;
break;
}
}
System.out.println("最大公约数为"+gys);
System.out.println("最小公倍数为"+gbs);
}
}
水仙花数
- 三位数
- 个位、十位、百位的数的立方和不能为原数
public class 求解水仙花数 {
public static void main(String[] args) {
System.out.println("求解水仙花数");
for (int i = 100;i<1000;i++){
if (i == (i%10)*(i%10)*(i%10)+(i%100/10)*(i%100/10)*(i%100/10)+(i/100)*(i/100)*(i/100)){
System.out.println(i);
}
}
}
}
九九乘法表
public class 九九乘法表 {
public static void main(String[] args){
for (int i = 1;i<=10;i++){
for (int j = 1 ;j<=i;j++){//第j列有最多i个式子
System.out.print(j + "*" + i + "=" + (i*j) + " " );
}
System.out.println();//输出完一行换行
}
}
}
while循环
初始化语句;
while(条件判断语句){
循环体语句;
条件控制语句;
}
从键盘读入个数不确定个整数,判断输入的正数和负数的个数,按0结束程序
import java.util.Scanner;
public class 判断正数负数个数 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int zhengshu=0,fushu=0,number=0;
while(true){
number = scan.nextInt();
if(number > 0){
zhengshu +=1;
}else if (number<0){
fushu +=1;
}
if (number == 0){
break;
}
}
System.out.println("你输入的正数共有"+zhengshu+"个");
System.out.println("你输入的负数共有"+fushu+"个");
}
}
do-while循环
先执行,后判断,至少执行一次循环体
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句);
使用场景
- 明确循环次数,使用for循环
- 不明确循环次数,使用while循环
- 基本不适用do-while循环
跳转控制语句
- continue
- break
continue可以结束本次循环,进入下一次循环
// 打印除了5以外1-10的数字
for(int i=1;i<=10;i++){
if(i==5){
continue;
}
System.out.println(i);
}
break会结束循环
//打印1~4
for(int i=1;i<=10;i++){
if(i==5){
break;
}
System.out.println(i);
}
标号
package 第一章基础;
import java.util.Scanner;
public class 跳转控制 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("请输入成绩:");
int score = scanner.nextInt();
switch (score/10){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("成绩不合格,继续努力!");
break;
case 6:
case 7:
case 8:
case 9:
case 10:
System.out.println("成绩合格!继续保持!");
break;
default:
System.out.println("输入不合法,请重试");
}
}
}
}
在上面的程序中,使用break只能结束switch的循环,而无法结束while的循环,为了结束指定的循环,需要使用标号
package 第一章基础;
import java.util.Scanner;
public class 跳转控制 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 使用标号
loop:while(true){
System.out.println("请输入成绩:");
int score = scanner.nextInt();
switch (score/10){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("成绩不合格,继续努力!");
// 跳出指定标号的循环
break loop;
case 6:
case 7:
case 8:
case 9:
case 10:
System.out.println("成绩合格!继续保持!");
// 跳出指定标号的循环
break loop;
default:
System.out.println("输入不合法,请重试");
}
}
}
}
Random随机数
作用:产生一个随机数
导包
import java.util.Random;
实例化
Random r = new Random();
获取随机数
int number = r.nextInt(10);// 0~10,左闭右开