Java基础学习(三):流程控制
- Java基础学习(三):流程控制
- 用户交互
- 输出
- 输入
- 代码结构
- 选择结构
- 循环结构
- 用户交互
本文为个人学习记录,内容学习自 狂神说Java
用户交互
输出
System.out.print(); // 最基本的输出语句
System.out.print("\n"); // 手动换行
System.out.println(); // 输出完自带换行的输出语句
小技巧:在 IntelliJ IDEA 中,直接输入 sout + Enter
即可快速生成 System.out.println();
输入
在 JDK5 引入了 java.utils.Scanner
,可以通过 Scanner 类获取用户的输入
-
Scanner 类的 next 方法:
-
使用 next() 方法获取输入的字符串
- 阻塞线程,若此时缓冲区中存在有效字符串,则直接取出,否则等待用户输入内容,此时输入的内容会被保存至缓冲区,直至键入回车时检查是否存在有效字符串,若存在则取出,否则继续等待用户输入,如此循环往复
- 此处的有效字符串是以空格、制表符、换行符等分隔符进行分隔的字符串
- 对于缓冲区中有效字符之前的空格,会自动将其从缓冲区中去除
- 只从缓冲区中取出第一个有效字符串
- 无法得到带有空白(空格和制表符)的字符串
Scanner scanner = new Scanner(System.in); // 创建Scanner对象 System.out.println("请输入内容:"); String str = scanner.next(); // 使用next方法接收,该语句会阻塞线程直至输入有效字符并键入回车 System.out.println("输入的内容为:" + str); scanner.close(); // 凡是属于IO流的类,如果不关闭就会一直占用资源
-
使用 nextLine() 方法获取输入的字符串
- 阻塞线程,若此时缓冲区中存在字符串,则直接取出,否则等待用户输入内容,此时输入的内容会被保存至缓冲区,直至键入回车时从缓冲区中读取字符串
- 可以获得带空白(空格和制表符)的字符串
Scanner scanner = new Scanner(System.in); // 创建Scanner对象 System.out.println("请输入内容:"); String str = scanner.nextLine(); // 使用nextLine方法接收,该语句会阻塞线程直至键入回车 System.out.println("输入的内容为:" + str); scanner.close(); // 凡是属于IO流的类,如果不关闭就会一直占用资源
-
其他的方法,如 nextInt()、nextFloat()、nextBoolean() 和 next() 同理
-
举个复杂点的栗子:
Scanner scanner = new Scanner(System.in); System.out.println("请输入数据:"); // 输入 " 12 345 ",中间的空白为空格 String i = scanner.next(); String j = scanner.nextLine(); System.out.println("输出i:"+i); // 输出为 "12" System.out.println("输出j:"+j); // 输出为 " 345 "
-
-
Scanner 类的 hasNext 方法:
-
使用 hasNext() 方法判断是否有字符串
- 阻塞线程,若此时缓冲区中存在有效字符串,则直接返回true,否则等待用户输入内容,此时输入的内容会被保存至缓冲区,直至键入回车时检查是否存在有效字符串,若存在则返回true,否则继续等待用户输入,如此循环往复
- 仅进行判断,不会从缓冲区中取出数据
-
使用 hasNextLine() 方法判断是否有字符串
- 阻塞线程,若此时缓冲区中存在字符串,则直接返回true,否则等待用户输入内容,此时输入的内容会被保存至缓冲区,直至键入回车时返回true
- 仅进行判断,不会从缓冲区中取出数据
-
其他的方法,如 hasNextInt()、hasNextFloat()、hasNextBoolean() 和 hasNext() 同理,只有当缓冲区中存在有效字符串时才进行判断,不同点在于会根据输入数据的类型判断返回值为true还是false
- 主要用于判断输入的数据类型
if (scanner.hasNextInt()){ // 判断接收到的是不是int类型i = scanner.nextInt(); // 从缓冲区中取出数据System.out.println("输入为整型"); }else {System.out.println("输入不为整型"); } scanner.close();
-
代码结构
Java 代码包含了三种基本结构:顺序结构、选择结构、循环结构
选择结构
-
if 单选择结构
if (布尔表达式){// 如果布尔表达式为true执行的语句 }
-
if 双选择结构
if (布尔表达式){// 如果布尔表达式为true执行的语句 }else{// 如果布尔表达式为false执行的语句 }
-
if 多选择结构
if (布尔表达式1){// 如果布尔表达式1为true执行的语句 }else if (布尔表达式2){// 如果布尔表达式2为true执行的语句 }else if (布尔表达式3){// 如果布尔表达式3为true执行的语句 }else{// 如果以上布尔表达都不为true执行的语句 }
-
switch 多选择结构
switch语句中的变量类型可以是:
- byte、short、int 或者 char
- 从 JDK7 开始支持 String 了
switch (表达式){case 值1 :// 语句1break; // 可选case 值2 :// 语句2break; // 可选default: // 可选// 语句3 }
注意:① break 用于退出 switch-case 语句,没有 break 的话会顺序执行后续语句直至 break ② 当不满足所有case时,执行default
循环结构
-
while 循环
while (布尔表达式) {// 循环语句 }
-
do-while 循环
do {// 循环语句 }while (布尔表达式);
-
for 循环
for (初始化; 布尔表达式; 更新) {// 循环语句 }
注意:for 循环中“初始化”、“布尔表达式”、“更新”三部分都可以省略,如果省略了布尔表达式将会变成死循环
-
(JDK5 新增)增强型 for 循环
for (声明语句: 表达式){// 循环语句 }
增强型 for 循环主要用于数组或集合,一个简单的遍历数组元素的应用如下:
int[] numbers = {10, 20, 30}; // 数组的定义 for (int x: numbers){ // 遍历数组元素System.out.println(x); }
-
循环中的关键字:break continue goto
- break : 在循环中使用时,用于结束整个循环
- continue : 用于结束当次循环,直接进行下一次的循环
- goto : 尽管 goto 并没有在 Java 中得到正式应用,但仍然保留了这一关键字,不建议使用