2021.4.25 Java基础知识(二)——语句、流程相关
一、输入输出
1)输出
见Java:输入输出、格式化输出 - ShineLe - 博客园
2)输入
一个从控制台读取一个String和一个整数的例子:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Input your name:"); String name = scanner.nextLine();//读取一行输入并获取字符串 System.out.print("Input your age:"); int age = scanner.nextInt(); //读取一行输入并获取整数 System.out.printf("Hi,%s,you are %d\n", name, age); } }
①导入java.util.Scanner;
②创建Scanner对象scanner,创建时传入参数System.in。直接使用System.in读取用户输入虽然可行,但是需要更复杂的代码,而通过Scanner就可以简化后续代码
③输入;scanner.nextLine()接收用户输入的字符串,scanner.nextInt()接收用户输入的整数。Scanner会自动转换数据类型,因此不用手动转换。
二、控制型语句
1、if
if (条件1){ //执行语句1 } else if (条件2){ //执行语句2 } else { //执行语句3 }
当执行语句只有一句时,不需要加花括号。但是,建议任何时候都加花括号。
对于相等的判断
①浮点值
由于浮点值的表示有精度限制,所以用==判断,可能会出错,正确的判断两个浮点值是否相等,应该由二者之差是否在某个精度范围内来决定
②引用类型
对引用类型用==判断,只有在二者指向相同地址时才会返回true;
如果想对二者内容是否相等进行判断,可以使用equals方法判断。用法:
if(s1.equals(s2)){ //... } //或 if("String".equals(s2)){ //... }
2、switch
用法同C,一个switch只有一个大括号,每个case之后用缩进区分。
switch(表达式){ case v1: 语句1; break; case v2: 语句2; break; default: 语句n; }
每个case之后都要有break,否则会穿透到下边的case中。
匹配字符串
switch语句还可以匹配字符串。字符串匹配时,是比较“内容相等”:
switch(fruit){ case "apple": 语句1; break; case "banana": 语句2; break; default: 语句n; break; }
更简洁的形式
从Java12开始,switch语句升级成为更简单的表达式语法,使用->,以取代break;防止原版switch因为漏写break而导致的穿透效应:
switch(表达式){ case v1 -> {语句块1;} case v2 -> {语句块2;} default -> {语句块n;} }
这种新语法在匹配之后,只执行匹配项对应的语句块中的语句,而不具有穿透效应。
使用新switch语法,不仅不需要break,还可以直接返回值,比如:
int n = switch(表达式){ case v1 -> 1; //if 表达式==v1 return 1 case v2 -> 2; default -> 0; }
yield
大多数时候,在switch表达式内部,我们会返回简单的值。
但是,如果需要复杂的语句,我们也可以写很多语句(在case之后的语句块中),放在{...}中,然后,用yield返回一个值作为switch语句的返回值:
yield:相当于一次return(return是函数中的,yield是switch专用)。
int n = switch (fruit) { case "apple" -> 1; case "banana" -> 2; default -> { int code = fruit.hashCode() yield code; } };
3、while
while(条件表达式){ //循环体 }
4、do while
do{ 循环体 } while (条件表达式) ;
不要忘记while之后的分号;
5、for
for(初始条件;结束检测条件;计数器){ //循环体 }
for each:用于遍历数组中的数据
for (n:arr){ //循环体 }
等价于Python中的:
for n in arr: //循环体
6、break、continue
跳出本次循环,之后break会终结整个循环,continue会继续执行循环的下一步。