第四章 逻辑控制

1. 顺序结构

顺序结构比较简单. 像我们之前写过的代码就是顺序结构的, 按照代码书写的顺序一行一行执行

System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
// 运行结果
	aaa
	bbb
	ccc

如果调整代码的书写顺序, 则执行顺序也发生变化

System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb");
// 运行结果
	aaa
	ccc
	bbb

2. 分支结构

2.1 if 语句

基本语法形式1:

if(布尔表达式){
  //条件满足时执行代码
}

如果布尔表达式结果为true,执行if中的语句,否则不执行。
基本语法形式2:

if(布尔表达式){
	//条件满足时执行代码
}else{
	//条件不满足时执行代码
}

如果布尔表达式结果为true,则执行if中语句,否则执行else中语句。
基本语法形式3: 多分支的情况

if(布尔表达式1){
    //条件满足时执行代码
}else if(布尔表达式2){
    //条件满足时执行代码
}else{
    //条件都不满足时执行代码
}

表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3
注意:
if-else语句如果不加大括号{},则只能写一条语句,且else与最近的if匹配。

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入你的分数:>");
    int score = scanner.nextInt();
    if(score >= 90){
        System.out.println("优秀");
    }else if(score >= 80 && score < 90){
        System.out.println("良好");
    }else if(score >= 70 && score < 80){
        System.out.println("中等");
    }else if(score >= 60 && score < 70){
        System.out.println("及格");
    }else if(score >= 0 && score < 60){
        System.out.println("不及格");
    }else{
        System.out.println("错误数据");
    }
}
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();

// 四年一闰,百年不闰,四百年再闰
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
    System.out.println("闰年");
} else {
    System.out.println("不是闰年");
}
scanner.close();
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入数字:>");
    int num = scanner.nextInt();
    if (num % 2 != 0) {
        System.out.println("奇数");
    } else {
        System.out.println("偶数");
    }
}

2.2 switch 语句

基本语法:

switch (整数 | 枚举 | 字符 | 字符串) {
    case 内容1: {
        内容满足时执行语句;
        [break;]
    }
    case 内容2: {
        内容满足时执行语句;
        [break;]
    }
        ...
	default: {
		内容都不满足时执行语句;
		[break;]
	}
}

执行流程:

  1. 先计算表达式的值
  2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
  3. 当表达式的值没有与所列项匹配时,执行default

注意:

  1. 多个case后的常量值不可以重复
  2. switch的括号内只能是以下类型的表达式:
    • 基本类型:byte、char、short、int,注意不能是long类型、浮点类型和布尔类型
    • 引用类型:String常量串、枚举类型
  3. 建议一个 switch 语句最好都要带上 default
  4. break 不要遗漏, 否则会失去 “多分支选择” 的效果
int day = 1;
switch(day) {
	case 1:
		System.out.println("星期一");
		// break;
	case 2:
		System.out.println("星期二");
		break;
}

// 运行结果
	星期一
	星期二
  1. switch 不能表达复杂的条件
// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
// 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示.
if (num > 10 && num < 20) {
	System.out.println("hehe");
}
  1. switch 虽然支持嵌套, 但是很丑,一般不推荐
int day = 1;
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 循环

基本语法格式:

while (循环条件) {
	循环语句;
}

循环条件为 true,则执行循环语句;否则结束循环。

public static void main(String[] args) {
    int i = 1;
    int ret = 1;
    while (i <= 5) {
        ret *= i;
        i++;
    }
    System.out.println(ret);
}
int i = 1;
int ret = 1;
int sum = 0;
while (i <= 5) {
    ret *= i;
    i++;
    sum += ret;
}
System.out.println(sum);

3.2 break

break 的功能是让循环提前结束。

for (int i = 100; i < 200; i++) {
    if (i%3==0) {
        System.out.println(i);
        break;
    }
}

3.3 continue

continue 的功能是跳过这次循环, 立即进入下次循环。

int num = 100;
int count = 0;
while (num <= 200) {
    if (num % 3 == 0) {
        num++;
        continue;
    }
    System.out.println(num);
    count++;
    num++;
}
System.out.println("共" + count + "个");

3.4 for循环

【基本语法】:

for(表达式1; 布尔表达式2; 表达式3){
	表达式4;
}
  • 表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次
  • 表达式2: 循环条件,满则循环继续,否则循环结束
  • 表达式3: 循环变量更新方式

【执行过程】:
①②④③—>②④③—>②④③—>②④③—>②④③—>②④③—>…—>②为false,循环结束。

3.5 do-while循环

【基本语法】:

do{
	循环语句;
}while(循环条件);

先执行循环语句, 再判定循环条件,循环条件成立则继续执行,否则循环结束。
注意:
1. do while 循环最后的分号不要忘记
2. 一般 do while 很少用到, 更推荐使用 for 和 while

4. 输入输出

4.1 输出到控制台

【基本语法】:

System.out.println(msg); 	// 输出一个字符串, 带换行
System.out.print(msg); 		// 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出
  • println 输出的内容自带 \n, print 不带 \n
  • printf 的格式化输出方式和 C 语言的 printf 是基本一致的

格式化字符串:

转换符类型举例
d十进制整数(“%d”, 100)100
x十六进制整数(“%x”, 100)64
o八进制整数(“%o”, 100)144
f定点浮点数(“%f”, 100f)100.000000
e指数浮点数(“%e”, 100f)1.000000e+02
g通用浮点数(“%g”, 100f)100.000
a十六进制浮点数(“%a”, 100)0x1.9p6
s字符串(“%s”, 100)100
c字符(“%c”, ‘1’)1
b布尔值(“%b”, 100)true
h散列码(“%h”, 100)64
%百分号(“%.2f%%”, 2/7f)0.29%

4.2 从键盘输入

使用 Scanner 读取字符串/整数/浮点数

import java.util.Scanner;

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.println("请输入你的姓名:>");
    String name = scanner.next();

    System.out.println("请输入你的年龄:>");
    int age = scanner.nextInt();

    System.out.println("请输入你的薪资:>");
    float salary = scanner.nextFloat();

    System.out.println("姓名:" + name + ",年龄:" + age + ",薪资:" + salary);
}

5. 猜数字游戏

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    Random random = new Random();
    int randNum = random.nextInt(101);  // [0,101)

    while (true) {
        System.out.println("请输入你要猜的数字:");
        int num = scanner.nextInt();
        if (num < randNum) {
            System.out.println("猜小了");
        } else if (num == randNum) {
            System.out.println("猜对了");
            break;
        } else {
            System.out.println("猜大了");
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值