Java流程控制
1、Java 常用类——Scanner(扫描器) 类
java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。
1.1、创建 Scanner 对象
Scanner的构造器支持多种方式,我们可以直接从输入流、文件和字符串中来构建Scanner对象。
借助于Scanner,我们既可以对任何字符串和基本类型(如int和double)的数据进行分析,也可以针对任何要处理的文本内容编写自定义的语法分析器。
1.1.1、创建输入流扫描器
1 | Scanner s = new Scanner(System.in); |
- 创建Scanner对象时,需要传入System.in对象,Scanner通过传入的System.in获取用户输入。
- 当我们创建完一个Scanner对象后,程序在执行next()或nextXxx()等方法时将会造成堵塞,直到有内容输入为止。
- Scanner默认使用空格作为分割符来分隔文本,用户也可以使用方法**useDelimiter()**方法自定义新的分隔符。
- 当用户输入一段字符串并按下回车键时,Scanner对象便可通过**next()或nextXxx()**方法逐个获取输入的字符串。
- 在获取输入之前,往往需要使用**hasNext()或hasNextXxx()**方法判断是否还有输入数据。
- hasNextXxx() 方法应与nextXxx() 方法配套使用。
- Scanner 对象使用完毕后记得关闭。
1.1.2、创建文件扫描器
1 | Scanner sc = new Scanner(new File("myNumbers")); |
1.1.3、创建字符串扫描器
1 | package com.atangbiji; |
输出:
1 | 1 |
1.2、使用nextLine()和next()方法获取输入的区别
(1)使用nextLine()方法获取输入
- 以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
- 可以获得空白。
1 | package com.atangbiji; |
输出:
(2)使用next()方法获取输入
- 一定要读取到有效字符后才可以结束输入。
- 对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
- next() 不能得到带有空格的字符串。
1 | package com.atangbiji; |
输出:(只输出了Hello)
1.3、使用nextXxx()方法获取输入
如果要输入 int、float 等类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用相应的 hasNextXxx() 方法进行验证,再使用 nextXxx() 方法来读取。
1.4、Scanner常用的其它方法
-
nextBigDecimal()
-
nextByte()
-
nextShort()
-
nextInt()
-
nextLong()
-
nextFloat()
-
nextDouble()
-
nextBoolean()
2、顺序结构
Java的基本结构就是顺序结构。
除非特殊说明,否则程序就会按顺序一句一句地往下执行。
3、选择结构
-
if单项选择结构
1
2
3if(条件){
代码块 //可以是一条语句,也可以是一组语句
} -
if双项选择结构
1
2
3
4
5if(条件){
//代码块1
}else{
//代码块2
} -
if多项选择结构
1
2
3
4
5
6
7if(条件1){
//代码块1
}else if(条件2){
//代码块2
}else{
//代码块3
} -
嵌套的if结构
1
2
3
4
5
6
7
8
9if(条件1){
if(条件2){
//代码块1
}else{
//代码块2
}
}else{
//代码块3
} -
switch多项选择结构
1
2
3
4
5
6
7
8
9
10
11
12switch(表达式){
case 常量1:
//代码块1;
break;
case 常量2:
//代码块2;
break;
... ...
default:
//代码块n;
break;
}
- switch 语句中的变量类型可以是: byte、short、int、 char或 String 。
注:switch 和if语句的区别
- switch和if-else相比,由于使用了Binary Tree算法,绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true。
- 编译器编译switch与编译if…else…不同。不管有多少case,都直接跳转,不需逐个比较查询。
- 相比于if-else结构,switch的效率绝对是要高很多的,但是switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。
- switch的效率与分支数无关。当只有分支比较少的时候,if效率比switch高(因为switch有跳转表)。分支比较多,那当然是使用switch的效率高。
4、循环结构
4.1、while循环
1 | while(布尔表达式){ |
当条件满足时执行循环体,直到条件不满足时跳出循环。
4.2、do…while循环
1 | do{ |
先执行一次循环体,再判断条件是否满足。当条件满足时执行循环体,直到条件不满足时跳出循环。
4.3、for循环(重点)
1 | for(初识条件表达式;布尔表达式;更新表达式){ |
4.4、增强型for循环
- 增强for循环(也称for-each循环)是JDK1.5以后引入的一个高级for循环。
- 它专门用来遍历数组和集合。
- 其内部原理是一个Iteration迭代器,在遍历的过程中,不能对集合中的元素进行增删操作。
- “要被遍历的对象.for”可快速生成增强型for循环。
1 | for(循环变量类型 循环变量名称:要被遍历的对象){ |
如:
1 | int[] num = {1,2,3,4,5}; |
**注:**Java采用“for”(而不是意义更明确的“foreach”)来引导这种一般被叫做“for-each循环”的循环,并使用“:”(而不是意义更明确的“in”)来分割循环变量名称和要被遍历的对象。
这样做的主要原因,是为了避免以为引入新的关键字,造成兼容性方面的问题。Java语言中,不允许把关键字当做变量名来使用。(虽然使用“foreach”这名字的情况并不多,但是“in”却是一个经常用来表示输入流的名字,例如java.lang.System类里,就有一个名字叫做“in”的static属性,表示“标准输入流”。)
5、break与continue
(1)break
- 在任何循环语句的主体部分,均可使用break 控制循环的流程。
- break的作用是:结束整个循环过程,不再执行循环中剩下的语句。
- break也可以在switch语句中使用。
- 在多层循环中, 一个break语句只向外跳一层。
(2)continue
-
continue语句用于循环语句体中。
-
continue的作用是:结束本次循环,直接进行下一次循环。
-
continue语句并没有终止整个循环。
(本讲完,系列博文持续更新中…… )
关注**“阿汤笔迹”** 微信公众号,获取更多学习笔记。
原文地址:http://www.atangbiji.com/2020/11/13/processControl
博主最新文章在个人博客 http://www.atangbiji.com/ 发布。