四、流程控制
目录:用户交互Scanner、顺序结构、选择结构、循环结构、break&continue、练习
1.用户交互Scanner
之前的基本语法中并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,可以用来获取用户的输入。java.util.Scanner是JDK5的新特性,可以通过Scanner类来获取用户输入。
Scanner s = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前一般需要使用hasNext()与hasNext
Line()判断事否还有输入的数。
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
if(scanner.hasNext()) {
String str = scanner.next();
System.out.println("输出的内容为:"+str);
}
scanner.close;//凡是属于IO流的类如果不关闭就会一直占用资源,最好关闭
}
}
next():Ⅰ一定要读取到有效字符后才可以结束输入。
Ⅱ对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
Ⅲ只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
Ⅳnext()不能得到带有空格的结束符。
nextLine():Ⅰ以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
Ⅱ可以获得空白。
2.Scanner进阶使用
例:输入int型的数
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
//判断是否还有输入的整数
scanner.hasNext();
3.顺序结构
Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。
顺序结构是最简单的算法结构。
语句与语句之间按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
4.if选择结构
1)if单选择结构
很多时候需要去判断一个东西是否可行,然后才行执行,这样的过程在程序中用if语句表时。
if(布尔表达式) {
//如果布尔表达式为true将执行的语句
}
equals:判断字符串是否相等
2)if双选择结构
if(布尔表达式) {
//如果布尔表达式为true将执行的语句
}else {
//如果布尔表达式为false将执行的语句
}
3)if多选择结构
if(布尔表达式1) {
//如果布尔表达式1为true将执行的语句
}else if(布尔表达式2) {
//如果布尔表达式2为true将执行的语句
}else {
//如果以上布尔表达式都不为true将执行的语句
}
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 case语句判断一个变量与一系列值中的某个值是否相等,每个值称为一个分支。
switch case语句中的变量类型可以是:byte、short、int或者char。从JDK7开始switch支持字符串类型了。同时case标签必须为字符串常量或字面量。
switch(expression) {
case value://语句
break;
case value://语句
break;
default://语句
}
case是穿透的,没有break;,将从匹配的case开始依次往下执行语句。
Project Structure——>查询编译后输出的路径——>把class文件拉进对应的java文件中
6.While循环详解
while是最基本的循环
while(布尔表达式) {
//循环内容
}
只要布尔表达式的值为true,循环就会一直执行下去。
大多数情况是会让循环停止下来的,需要一个让表达式失效的方式来结束循环。
少部分情况需要循环一直执行,比如说服务器的相应监听等。
循环条件一直为true就会造成无限循环(死循环),正常情况下应该尽量避免死循环。会影响程序性能或者造成程序卡死崩溃!
7.Dowhile循环
对于while语句而言,如果不满足条件,则不能进入循环。但有时候即使不满足条件,也至少要执行一次。
do···while循环和while循环相似,不同的是do···while循环至少会执行一次。
do {
//代码语句
}while(布尔表达式);
While和do-while的区别:Ⅰwhile先判断后执行,dowhile是先执行后判断
ⅡDo···while总是保证循环体会被至少执行一次,这是主要差别!
8.For循环详解
虽然所有循环结构都可以用while或者do···while表示,但Java提供了另一种语句——for循环,使一些循环结构变得更加简单。
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
for循环执行的次数是在执行前就确定的。
for(初始值;布尔表达式;更新) {
//代码语句
}
关于for循环的几点说明:最先执行初始化步骤,可以声明一种类型但可以初始化一个或多个循环控制变量,也可以是空语句。然后,检测布尔表达式的值,如果为true,循环体被执行;如果为false,循环终止,开始执行循环体后面的语句。执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。再次检测布尔表达式,循环执行上面的过程。
print输出完不会换行,println输出完会换行
输出完换行的两种方式:
System.out.println();
System.out.print("\n");
9.打印九九乘法表
步骤:Ⅰ先打印第一列
Ⅱ把固定的Ⅰ再用一个循环包起来
Ⅲ去掉重复项i<=j
Ⅳ调整样式
public class Demo {
public static void main(String[] args) {
for(int j=1;j<=9;j++) {
for(int i=1;i<=j;i++) {
System.out.print(j+"*"+i+"="+(j*i)+"\t");
}
System.out.println();
}
}
}
10.增强for循环
例:定义一个数组number
int[] number = {10,20,30,40,50};
遍历number数组的元素
for(int x:number) {
System.out.println(x);
}
11.break、continue、goto
1)break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行推出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
2)continue语句用在循环句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
3)关于goto关键字:goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,仍然看出一些goto的影子——带标签的break和continue。“标签”是指后面跟一个冒号标识符,例如:label:。对于Java来说唯一用来标签的地方是在循环语句之前,而在循环之前设置标签的唯一理由是:希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。
例:打印101-150之间的所有的质数
public class Demo {
public static void main(String[] args) {
outer:for(int i=101;i<150;i++) {
for(int j=2;j<i/2;j++) {
if(i%j==0) {
continue outer;
}
}
System.out.print(i+" ");
}
}
}
12.打印三角形及Debug
例:打印一个5行的三角形
public class Demo {
public static void main(String[] args) {
for(int i=1;i<=5;i++) {
for(int j=5;j>=i;j--) {
System.out.print(" ");//打印空白三角形1
}
for(int j=1;j<=i;j++) {
System.out.print(" ");//打印三角形2
}
for(int j=1;j<i;j++) {
System.out.print(" ");//打印三角形3
}
}
}
}
思路: