流程控制
用户交互Scanner
Scanner类可以实现计算机与人的交互。java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。
Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hasNext() 与 hasNextLine() 判断是否还有输入的数据。
next & nextLine
使用next方式接收一下输入的数据:
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
//next方式接收字符串
System.out.println("Next方式接收:");
//判断用户还有没有输入字符
if (scanner.hasNext()){
String str = scanner.next();
System.out.println("输入内容:"+str);
}//凡是属于IO流的类如果不关闭会一直占用资源,所以我们要对资源进行关闭
scanner.close();
}
测试数据:Hello World!
结果:只输出了Hello。
使用另一个方法来接收数据:nextLine():
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); // 从键盘接收数据
// nextLine方式接收字符串
System.out.println("nextLine方式接收:");
// 判断是否还有输入
if (scan.hasNextLine()) {
String str2 = scan.nextLine();
System.out.println("输入内容:" + str2);
}
scan.close();
}
测试数据:Hello World!
结果:输出了Hello World!
重点是两者的区别:
next():
-
一定要读取到有效字符后才可以结束输入。
-
对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
-
只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
-
next() 不能得到带有空格的字符串。
nextLine():
-
以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
-
可以获得空白。
顺序结构
JAVA的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
选择结构
1.if单选择结构:
我们需要判断一个东西是否可行我们才向下去执行。
if(布尔表达式){
//如果布尔表达式为true将执行的语句
}
意义:if语句对条件表达式进行一次测试,若测试为真,则执行下面的语句,否则跳过该语句。
2.if双选择结构:
说得明白一点就是“成功了怎么样否则怎么样”。
if(布尔表达式){
//如果布尔表达式的值为true
语句块1
}else{
//如果布尔表达式的值为false
语句块2
}
意义:当条件表达式为真时,执行语句块1,否则,执行语句块2。也就是else部分。
3.if多选择结构:
在实际生活中我们可能面临着有多个条件满足一个人条件就做对应的事,那么此时我们就需要多选择结构。
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
if 语句后面可以跟 else if…else 语句,这种语句可以检测到多种可能的情况。
if多选择结构使用的注意点:
- if 语句至多有 1 个 else 语句,else 语句在所有的 else if 语句之后。
- if 语句可以有若干个 else if 语句,它们必须在 else 语句之前。
- 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。
4.嵌套的if结构:
使用嵌套的 if…else 语句是合法的。也就是说你可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句。你可以像 if 语句一样嵌套 else if...else。
例如:
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}
}
5.switch多选择结构:
switch case 语句判断一个变量与一系列值中某个值是否相等若相等就执行对应语句块中的代码,每个值称为一个分支。
例如:
switch(expression){
case value :
//语句 break; //可选
case value :
//语句 break; //可选 //你可以有任意数量的case语句
default : //可选
//语句
}
使用switch case语句需要注意以下使用规则:
-
switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
-
switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
-
case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
-
当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
-
当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现break 语句。
-
switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断。
如果 case 语句块中没有 break 语句时,匹配成功后,从当前 case 开始,后续所有 case 的值都会输出。如果后续的 case 语句块有 break 语句则会跳出判断。
循环结构
顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,,就需要使用循环结构。
Java中有三种主要的循环结构:
-
while 循环
-
do…while 循环
-
for 循环
1.while循环:
while是最基本的循环,它的结构为:
while( 布尔表达式 ) {
//循环内容
}
例如:
public static void main(String[] args) {
int i = 0;
//i小于100就会一直循环
while (i<100){
i++; System.out.println(i);
}
}
只要布尔表达式的值为true那么就会一直循环下去。
在循环刚开始时,会计算一次“布尔表达式”的值,若条件为真,执行循环体。而对于后来每一次额外的循环,都会在开始前重新计算一次判断是否为真。直到条件不成立,则循环结束。
2.do...while循环:
对于上面while循环在每次循环之前我们都要判断布尔表达式的值是否为true,当为true的时候我们才会进行循环否则我们就会终止循环。有时候我们需要即使不满足条件我们也需要进行一次循环这时候我们就需要使用到do...while循环结构。
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
do {
//代码语句
}while(布尔表达式);
注意:布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。
例如:
public static void main(String[] args) {
int i = 0; int sum = 0;
do {
sum = sum+i; i++;
}while (i <= 100);
System.out.println("Sum= " + sum);
}
3.for循环:
语法格式如下:
for(初始化; 布尔表达式; 更新) {
//代码语句
}
for循环说明如下:
- 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
- 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
- 执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。
- 再次检测布尔表达式。循环执行上面的过程。
例如:
public static void main(String[] args) {
int a = 1; //初始化
while(a<=100){ //条件判断
System.out.println(a); //循环体
a+=2; //迭代
}
System.out.println("while循环结束!");
for(int i = 1;i<=100;i++){ //初始化//条件判断 //迭代
System.out.println(i); //循环体
}
System.out.println("while循环结束!");
}
breake&continue
breake关键字:
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。break 跳出最里层的循环,并且继续执行该循环下面的语句。
例如:
public static void main(String[] args) {
int i=0;
while (i<100){
i++;
System.out.println(i);
if (i==30){
break;
}
}
}
continue关键字:
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。在 for 循环中,continue 语句使程序立即跳转到更新语句。
例如:
public static void main(String[] args) {
int i=0;
while (i<100){
i++;
if (i%10==0){
System.out.println();
continue;
}
System.out.print(i);
}
}
区别:
-
break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
-
continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。