狂神JAVASE系列-流程控制篇
1. 用户交互Scanner
1.1 Scanner对象:
- Java提供的一个工具类,利用Scanner类可以获取用户的输入。
- java.util.Scanner是java5新特性
1.2 基本语法
Scanner scanner = new Scanner(System.in); 类 对象名(随便)
Scanner scanner = new Scanner(System.in);......scanner.close();
1.3 注意
通过Scanner类的next()和nextLine()方法获取输入的字符串,在读取前通常会使用hashNext()与hashNextLine()判断是否还有输入的数据
示例:
package Lckz;import java.util.Scanner;public class Demon01 { public static void main(String[] args) { //创建一个扫描器对象 用于接收键盘输入 Scanner scanner = new Scanner(System.in); System.out.println("使用next方式接收:"); //判断用户是否输入字符串 if(scanner.hasNext()){ //使用next方式接收 String str = scanner.next(); //程序会等待用户输入完毕 System.out.println("输出的内容为: "+str); } //凡是属于IO流的类一定要记得关流操作 //如果不关闭就会一直占用资源,要养成好的习惯用完就直接关掉 scanner.close(); }}
package Lckz;import java.util.Scanner;public class Demon02 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("使用nextLine方式接收: "); if(scanner.hasNextLine()){ String str = scanner.nextLine(); System.out.println("输出的内容为: "); } scanner.close(); //关流操作 }}
====================================================================
next()方法和nextLine()方法对比:有什么区别?
总结如下:
next():
- 一定要读取到有效字符才可以结束输入。也就是必须的输入
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
- 例如:Hello World 输出Hello
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
- next()不能得到带有空格的字符串。空格之后的就直接删了
nextLine()
- 以Enter作为结束符,即:nextLine()方法返回的输入回车之前地 所有字符
- 可以获得空白。
其他用法:
scanner.nextInt() scanner.nextFloat()
2. 顺序结构
自从而下 太简单
3. 选择结构
3.1 if单选结构
语法:if(布尔表达式){ 如果为真,执行的语句}
代码示例:
package struct;import java.util.Scanner;public class ifDemon01 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入内容"); String s = scanner.nextLine(); if (s.equals("hello")){ System.out.println(s); } System.out.println("End"); scanner.close(); }}
3.2 if双选结构
if(布尔表达式){ 语句A; //布尔表达式的值为true}else{ 语句B; //布尔表达式的值为false}
代码示例:
package struct;import java.util.Scanner;public class ifDemon02 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入成绩"); int score = scanner.nextInt(); if (score>60){ System.out.println("及格"); }else { System.out.println("不及格"); } scanner.close(); }}
3.3 if多选择结构
语法:
if(布尔表达式1){ 如果1为真,执行语句A}else if(布尔表达式2){ 如果2为真,执行语句B}else if(布尔表达式3){ 如果2为真,执行语句C}else{ 上述都不满足 执行语句D}
代码示例:
package struct;import java.util.Scanner;public class ifDemon03 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); /* if语句至多有一个else语句,且else语句在所有的else if语句之后 if语句可以有若干个else if语句,它们必须在else语句之前 一旦其中一个else if 检测为true,其他的else if 以及else语句都将跳过执行 */ System.out.println("输入您的成绩:"); int score = scanner.nextInt(); if (score==100){ System.out.println("恭喜满分"); }else if(score=90){ System.out.println("A"); }else if(score=80){ System.out.println("B"); }else if(score=70){ System.out.println("C"); }else if(score=60){ System.out.println("D"); }else{ System.out.println("不合格"); } scanner.close(); }}
3.4 嵌套的if结构
语法:
if(布尔表达式1){ if(布尔表达式2){ }}
代码示例:寻找一个数,在1-100之间
3.5 switch多选择结构
语法:
switch(expression){ case value1: 执行语句A break; //可选 case value2: 执行语句B break; ..... default: //可选 意思是可有可无 执行语句}
注意点:不写break,会出现case穿透
代码示例:
package struct;public class switchDemon01 { public static void main(String[] args) { char rank = 'A'; /* 不加break 会出现case穿透 优秀 良好 一般 就那样 呵呵 */ switch (rank){ case 'A':System.out.println("优秀");break; case 'B':System.out.println("良好");break; case 'C':System.out.println("一般");break; case 'D':System.out.println("就那样");break; case 'E':System.out.println("呵呵");break; } }}
switch总结
- switch语句中的变量类型可以是,byte,short,int或者char
- 从JAVASE 7开始,switch支持字符串String类型。
-
package struct;public class switchDemon02 { public static void main(String[] args) {String name = "EZ"; //JDK7新特性,表达式的结果可以是字符串 //反编译 java---->class(字节码文件)---------->反编译 switch (name){ case "EZ": System.out.println("adc"); break; case "德玛": System.out.println("上单"); break; } }}
查看上面代码反编译后的结果
-
//// Source code recreated from a .class file by IntelliJ IDEA// (powered by FernFlower decompiler)//package struct;public class switchDemon02 { public switchDemon02() { } public static void main(String[] var0) { String var1 = "EZ"; byte var3 = -1; switch(var1.hashCode()) { case 2229: if (var1.equals("EZ")) { var3 = 0; } break; case 23854855: if (var1.equals("寰风帥")) { var3 = 1; } } switch(var3) { case 0: System.out.println("adc"); break; case 1: System.out.println("涓婂崟"); } }}
4. 循环结构
4.1 while循环
- 小部分情况需要循环一直进行,例如服务器请求响应监听等,、
- 除此之外,大多数情况是会让循环停下来的。
- 输出1-100
int i = 0;while(i<100){ i++; system.out.println(i)}
代码示例:1+2+3+...+100
package struct;public class WhileDemon01 { public static void main(String[] args) { int sum = 0; int i = 0; while (i<=100){ sum = sum + i; i++; } System.out.println(sum); }}
4.2 do-while循环
对于while而言,如果不满足条件,则无法进入循环,但是有时候我们需要即使不满足条件,也至少执行一次。
while vs do-while
(1) while先判断后执行,do-while先执行后判断
(2)由(1)可知,do-while至少会执行一次。
语法结构:
do{ 执行语句 }while(布尔表达式);
package struct;public class WhileDemon01 { public static void main(String[] args) { int sum = 0; int i = 0; do { sum = sum + i; i++; }while (i<=100); System.out.println(sum); }}
public class WhileDemon01 { public static void main(String[] args) { int a = 0; while (a10); }}
4.3 for循环
语法:
for(初始化;布尔表达式;更新){ //代码语句}
关于for循环的几点说明:
最先执行初始化步骤,可以声明一种类型,但可以初始化一个或者多个循环控制变量,也可以是空语句。
检测布尔表达式的值,如果结果为true,循环体被执行,否则被终止
执行一次循环后,更新循环控制变量
for(;;i++){}///死循环for(;;;){}fori tab快捷
示例1:计算0-100之间的奇数和偶数的和
public class WhileDemon01 { public static void main(String[] args) { //计算0-100之间的奇数和偶数的和 int NumJs = 0; int NumOs = 0; for(int i=0;i<=100;i++){ if (i%2==0){ NumOs += i; //偶数累加 }else { NumJs += i; //奇数累加 } } System.out.println("奇数和偶数的和"+NumOs+NumJs); }}
实例2:循环输出1-1000之间能被5整除的数,并且每行输出3个
public class WhileDemon02 { public static void main(String[] args) { //循环输出1-1000之间能被5整除的数,并且每行输出3个 for (int i = 0; i < 1000; i++) { if(i%5==0){ System.out.print(i+"\t"); } if(i%(5*3)==0){ System.out.println("\n"); } } } }/*注意:println:输出一个语句结束会自动换行输出,print在输出完一个语句时并不会自动换行。*/
示例3: 实现99乘法表
public class WhileDemon03 { public static void main(String[] args){ /* 行变量走外循环;列变量走内循环 */ for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.print(i+"*"+j+"="+i*j+"\t"); } System.out.println(); }}}
4.4 增强型for循环(java5中引入一种主要用于数组的增强型for循环)
语法格式
for(声明语句:表达式){ //执行语句}
声明语句
声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式
要访问的数组名或者是返回值为数组的方法。
public class ForDemon01 { public static void main(String[] args) { int [] number = {10,20,30,40}; //增强型for循环 for(int x:number){ System.out.println(x); } }}================================================public class ForDemon01 { public static void main(String[] args) { int [] number = {10,20,30,40};//普通for循环 for(int i=0;i<5;i++){ System.out.println(number[i]; } }}
5. break & continue
break:用于强行退出循环,不执行循环中剩余的语句(break语句也在switch语句中使用)
continue:用于终止某次循环过程。
goto:尽管goto是java的一个保留字,但未在语言中正式使用,也就是java中没有goto
带有标签的break和continue
代码示例:
public class BreakDemon01 { public static void main(String[] args) { int i = 0; while(i<10){ i++; if(i==8){// break;//输出8以后就跳出循环了 不执行了 continue;//就跳出本次循环了 也就是输出8之前跳出去 } System.out.println(i); } }}
6.代码实践练习
打印 三角形
public class PracticeDemon01 { public static void main(String[] args) { //打印三角形 for (int i = 1; i =i; j--) { System.out.print(" "); } for (int j = 1; j <=i ; j++) { System.out.print("*"); } for (int j = 1; j <i ; j++) { System.out.print("*"); } System.out.println(); /* **** ***** ******* ********* */ } }