Java流程控制
1.用户交互Scanner
-
Scanner是Java5提供的一个工具类(java.until.Scanner),用来获取用户的输入,实现人机交互。
-
基本语法:Scanner s=new Scanner(System.in);
-
通过Scanner类的next()和nextLine()方法获取输入的字符串,在读取前一般需要使用hasNext()或hasNextLine()来判断是否还有输入。
-
next()和nextLine()方法的区别:
- next():
- 不能得到带空格的字符串;
- 一定要读取到有效字符才可以结束输入
- 对输入有效字符之前遇到的空格符,next()方法会自动将其去掉
- 只有输入有效字符后才将其后面输入的空白符作为结束符
- next()方法的结束符有空格,tab,回车
- nextLine():常用
- 可以获得有空格的字符串
- 只以回车作为结束符
- next():
-
Scanner的其他方法:scanner.hasNextInt()等....
-
练习代码:
public static void main(String[] args) { /*输入多个数字,并求输入个数和平均值,输入非数字结束 */ //创建一个扫描器对象,用于接收键盘数据 Scanner scanner=new Scanner(System.in); //求和sum double sum=0; //计数num int num=0; System.out.println("请输入数字:"); //通过循环判断是否还有输入,并在里面对每一次输入进行求和并计数 while (scanner.hasNextDouble()){ double x=scanner.nextDouble(); sum=sum+x;//累加和 num++;//计数 System.out.println("你输入了第"+num+"个数字,当前求和sum="+sum); } System.out.println("输入了"+num+"个数字"); System.out.println(+num+"个数字的平均值是:"+sum/num); //凡是属于IO流的类如果不关闭会一直占用资源,要在结束时关闭 scanner.close(); }
-
2.顺序结构
- Java的基本结构,除非特别指明,否则就按顺序一句一句的执行
- 顺序结构是最简单的算法结构
3.选择结构
-
if选择结构
- 语法:if(任意表达式){表达式为真语句; }
-
if-else
-
语法:if(任意表达式){表达式为真语句; }
else{表达式为加语句; }
-
public static void main(String[] args) { Scanner scanner=new Scanner(System.in); String str=scanner.nextLine(); //equals:判断字符串是否相等 if(str.equals("Hello")){ System.out.println(str); }else{ System.out.println("End"); } scanner.close(); }
-
-
if多选择结构:
-
语法:if(任意表达式){表达式为真语句; }
else if(任意表达式){语句; }
else if(任意表达式){语句; }
else{表达式全都为假语句;}
-
-
嵌套的if结构:
-
语法:if(任意表达式1){
if(任意表达式2){
}
}
-
-
switch选择结构:
-
语法:switch(任意表达式){
case 1:语句;
case 2:语句;
default:语句;
}
-
case后的值必须是整型常量(字符型常量,枚举值)
-
case穿透现象:如果case语句后没有加break语句,则程序会一直向下执行直到遇到break或switch结束
-
break可用于结束选择结构
-
JDK7新特性,Java支持字符串类型(String,字符的本质是数字)作为switch表达式
-
4.循环结构
-
while循环
-
语句:while(任意表达式){表达式为真时的+循环体;}
-
先判断再执行,可能一次都不执行
-
避免死循环
-
public static void main(String[] args) { /* while(true){ //表达式恒为真,死循环,程序会崩溃 //大多数情况下会让循环在某一条件下结束 //少部分情况要让循环一直执行,比如服务器的请求和响应监听等 } */ //计算1+2+3+....+100=? int i=0; int sum=0; while(i<=100){ sum+=i; i++; } System.out.println(sum);//输出结果为5050 }
-
-
do-while循环
-
语句:do{
循环体;
}while(任意表达式);
-
先执行再判断,循环体至少执行一次
-
public static void main(String[] args) { int i=0; while(i<0){ System.out.println("while 输出"+i); } System.out.println("+++++++++++++++"); do{ System.out.println("do-while 输出"+i); } while(i<0); }
-
-
for循环
-
for循环语句是支持迭代的一种通用结构,是最有效,最灵活的循环结构
-
语句:for(表达式1(初始化);表达式 2 (布尔表达式);表达式 3(更新迭代)){循环体;}
-
for循环的初始化步骤,可以声明一种类型,和一个或多个循环控制变量
-
执行一次循环体之后,才执行表达式3
-
for循环三个表达式都可以为空
-
public static void main(String[] args) { int i=1;//初始化 while (i<100){//条件判断 System.out.println(i); i+=2;//迭代 } System.out.println("while循环结束"); // 初始化 条件判断 迭代 for (int a = 0; a < 100; a+=2) { System.out.println(a); } System.out.println("for循环结束"); /*for 死循环 for(;;) */ }
-
for循环练习:
public static void main(String[] args) { //练习1:输出1-1000之内能被5整除的数,且每行输出3个 for (int i = 0; i <= 1000; i++) { if(i%5==0){//计算能被5整除的数 System.out.print(i+"\t"); } if (i%(5*3)==0){//换行 System.out.println(); } /* println 输出 并换行 print输出后不会换行 \t 转义字符 代表一个tab */ }
//练习2:打印出99乘法表 int x ,y; for (x = 1; x<=9; x++) { for (y=1;y<=x;y++){ System.out.print(+y+"*"+x+"="+x*y+"\t"); } System.out.println(); }
-
-
增强for循环:
-
Java引入一种主要用于数组和集合的增强型for循环。
-
语句:for(声明语句:表达式){循环体;}
-
声明语句:声明新的局部变量,该变量的类型必须和数组元素的数据类型一致
-
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
-
增强型for循环:
public static void main(String[] args) { int[] number={1,2,3,4,5}; for (int x:number){ System.out.println(x); } /*等价于: int [] number={1,2,3,4,5}; for (int x=0;x<5;i++){ System.out.println(number[x]); } */
-
5.控制语句(break和continue、goto)
- break:用于循环结构和switch语句中,可以强制退出循环结构,不执行循环体中剩下的语句
- continue:只能用于循环语句中,终止某一次循环过程,跳过本次循环后续语句,直接进入下一次循环
- goto:语句:goto:....;
6.练习(打印三角)
-
代码:
package com.bbh.struct; public class TestDemo01 { public static void main(String[] args) { //打印三角形 for (int i = 1; i <= 5; i++) { for (int j = 5; j>=i; j--) { System.out.print(" "); } for (int j = 0; j < i; j++) { System.out.print("*"); } for (int j = 1; j < i; j++) { System.out.print("*"); } System.out.println(); } } }