4.流程控制

1、输入/输出

输出

我们总是使用System.out.println()来向屏幕输出一些内容。
println是print line的缩写,表示输出并换行。因此,如果输出后不想换行,可以用print()

格式化输出

格式化输出使用System.out.printf(),通过使用占位符%?printf()可以把后面的参数格式化成指定格式。
在这里插入图片描述

占位符说明
%d格式化输出整数
%x格式化输出十六进制整数
%f格式化输出浮点数
%e格式化输出科学计数法表示的浮点数
%s格式化字符串

注意:由于%表示占位符,因此,连续两个%%表示一个%字符本身。
在这里插入图片描述

输入

  • 首先,我们通过import语句导入java.util.Scannerimport是导入某个类的语句,必须放到Java源代码的开头,后面我们在Java的package中会详细讲解如何使用import
  • 然后,创建Scanner对象并传入System.inSystem.out代表标准输出流,而System.in代表标准输入流。直接使用System.in读取用户输入虽然是可以的,但需要更复杂的代码,而通过Scanner就可以简化后续的代码。
  • 有了Scanner对象后,要读取用户输入的字符串,使用scanner.nextLine(),要读取用户输入的整数,使用scanner.nextInt()Scanner会自动转换数据类型,因此不必手动转换。
    在这里插入图片描述

练习

在这里插入图片描述

2、if判断语句

if语句的基本语法是:

if (条件) {
    // 语句块-条件满足时执行
}

if语句还可以编写一个else { ... },当条件判断为false时,将执行else的语句块。
还可以用多个if ... else if ...串联。

if (条件1) {
    // 语句块 - 条件1满足时执行
} else if (条件2){
	//语句块 - 条件2满足时执行
} else {
	//语句块 - 条件不满足时执行
}
  • 根据if的计算结果(true还是false),JVM决定是否执行if语句块(即花括号{}包含的所有语句)。
  • if语句块只有一行语句时,可以省略花括号{}.
  • 在串联使用多个if时,要特别注意判断顺序。原因是if语句从上到下执行时,先判断条件1成功后,后续else不再执行,因此,条件2没有机会执行了。

判断浮点数相等

  • 浮点数在计算机中常常无法精确表示,并且计算可能出现误差,因此,判断浮点数相等用==判断不靠谱,正确的方法是利用差值小于某个临界值来判断。
    在这里插入图片描述

判断引用类型相等

  • 判断值类型的变量是否相等,可以使用==运算符。
  • ==表示“引用是否相等”,或者说,是否指向同一个对象
  • 要判断引用类型的变量内容是否相等,必须使用equals()方法。
    在这里插入图片描述
    注意:执行语句s1.equals(s2)时,如果变量s1为null,会报’NullPointerException‘。
    要避免NullPointerException错误,可以利用短路运算符&&
public class Main {
    public static void main(String[] args) {
        String s1 = null;
        if (s1 != null && s1.equals("hello")) {
            System.out.println("hello");
        }
    }
}
请用if ... else编写一个程序,用于计算体质指数BMI,并打印结果。
BMI = 体重(kg)除以身高(m)的平方
BMI结果:
过轻:低于18.5
正常:18.5-25
过重:25-28
肥胖:28-32
非常肥胖:高于32

在这里插入图片描述

3、switch多重选择

switch语句根据switch (表达式)计算的结果,跳转到匹配的case结果,然后继续执行后续语句,直到遇到break结束执行。

  • 如果值没有匹配到任何case,那么,switch语句不会执行任何语句。这时,可以给switch语句加一个default,当没有匹配到任何case时,执行default
switch(结果) {
case result1 :
	语句1;
	break;
case result2 :
	语句2;
	break;
case result3 :
case result4:
	语句3;
	break;
default:
	语句4;
	break;
}
  • 使用switch时,注意case语句并没有花括号{},而且,case语句具有“穿透性”,漏写break将导致意想不到的结果。如果匹配到case 2开始,后续语句将全部执行,直到遇到break语句。因此,任何时候都不要忘记写break。
  • 如果有几个case语句执行的是同一组语句块,可以如case3、case4这么写。
  • switch语句还可以匹配字符串。字符串匹配时,是比较“内容相等”。
  • 从Java 12开始,switch语句升级为更简洁的表达式语法,使用类似模式匹配(Pattern Matching)的方法,保证只有一种路径会被执行,并且不需要break语句。
switch (num){
	case 值1 -> 语句1;
    case 值2 -> 语句2;
    case 值3 -> 语句3;
    default -> 语句4;
}
  • 注意:新语法使用->,如果有多条语句,需要用{}括起来。不要写break语句,因为新语法只会执行匹配的语句,没有穿透效应。
  • 很多时候,我们还可能用switch语句给某个变量赋值。使用新的switch语法,不但不需要break,还可以直接返回值。

yield

大多数时候,在switch表达式内部,我们会返回简单的值。但是,如果需要复杂的语句,我们也可以写很多语句,放到{...}里,然后,用yield返回一个值作为switch语句的返回值。
在这里插入图片描述

练习

在这里插入图片描述

4、while循环

while条件循环的基本用法是:

while (条件表达式) {
    循环语句
}
// 继续执行后续代码

while循环在每次循环开始前,首先判断条件是否成立。如果计算结果为true,就把循环体内的语句执行一遍,如果计算结果为false,那就直接跳到while循环的末尾,继续往下执行。

  • while循环先判断循环条件是否满足,再执行循环语句;
  • while循环可能一次都不执行;
  • 编写循环时要注意循环条件,并避免死循环。

5、do while循环

do while循环则是先执行循环,再判断条件,条件满足时继续循环,条件不满足时退出。它的用法是:

do {
执行循环语句
} while (条件表达式);
可见,do while循环会至少循环一次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值