Java流程控制
顺序结构
-
JAVA的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。
-
顺序结构是最简单的算法结构。
-
语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个一次执行的处理步骤组成的,它是任何一个算法都离不开的一种算法结构。
这样的就是顺序结构(从上到下一次执行)
选择结构
-
if单选择结构
-
if双选择结构
-
if多选择结构
-
嵌套的if结构(前四个都属于if)
-
switch多选择结构
if单选择结构
我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示。
语法:
if(布尔表达式){
//如果布尔表达式为true将执行的语句
}
注意if括号里面的内容,如果不写,默认为布尔表达式==true。
如果为true,则执行{}里面的语句,如果为false,择直接跳过{}里的语句。
public static void main(String[] args) { Scanner scanner = new Scanner(System.in);//创建一个扫描器,用于接收用户输入 System.out.println("请输入一个内容:" ); String s = scanner.nextLine();//获取输入 //equals:判断字符串是否相等 if (s.equals("Hello")) { System.out.println(s); } System.out.println("End"); scanner.close(); }
如果输入Hello以外的东西会直接跳过执行输出输入的Hello(跳过输出s),直接输出End,如果输入Hello则会输出Hello后再执行输出End
if双选择结构
-
假设:公司现在要收购一个软件,成功了,给人支付100万元,失败了,自己找人开发。这样的需求用一个if就搞不定了,我们需要有两个判断,需要一个双选择结构,所以就有了if-else结构。
语法:
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
public static void main(String[] args) { //考试分数大于60就是及格,小于60就是不及格 Scanner scanner = new Scanner(System.in); System.out.println("请输入成绩:"); int score = scanner.nextInt(); if (score>=60){ System.out.println("及格"); }else{ System.out.println("不及格"); } }
if多选择结构
-
我们发现刚才的代码不符合实际情况,真是的情况还可能存在ABCDE......,存在区间多级判断。比如90-100就是A,80-90就是B..等等,在生活中我们很多时候的选择也不仅仅只有两个,所以我们需要一个多选择结构来处理这类问题!
语法:
if(布尔表达式1){
//如果布尔表达式1的值为true执行代码
}else if(布尔表达式2){
//如果布尔表达式2的值为true执行代码
}else if(布尔表达式3){
//如果布尔表达式3的值为true执行代码
}else if(布尔表达式4){
//如果布尔表达式4的值为true执行代码
}
...
public static void main(String[] args) { //if 多选择结构 //如果成绩在100-90为A,在90-80为B...... Scanner scanner = new Scanner(System.in); System.out.println("请输入成绩:"); int score = scanner.nextInt(); if(score==100){ System.out.println("满分!"); }else if(score>=90&&score<100){ System.out.println("A"); }else if (score<90&&score>=80){ System.out.println("B"); }else if (score<80&&score>=70){ System.out.println("C"); }else if (score<70&&score>=60){ System.out.println("E"); }else if (score<60&&score>=0){ System.out.println("不及格"); }else{ System.out.println("输入的成绩不合法!"); } scanner.close(); }
注意点!!!
-
在1个if 语句里至多有一个else 语句,else 语句在所有的else if 语句之后。
-
if 语句可以有若干个else if 语句,他们必须在else 语句之前。
-
一旦其中一个的else if 语句检测为true,其他的else if 以及else 语句都将跳过执行。
嵌套的if结构
使用嵌套的if...else 语句是合法的。也就是说你可以在另一个if 或者else if 语句中使用if 或者else if 语句。你可以像if 语句一样嵌套else if...else 。
语法:
if(布尔表达式1){
//如果布尔表达式1的值为true执行代码
if(布尔表达式2){
//如果布尔表达式2的值为true执行代码
}
}
思考:假如我们要确定一个数,已知它是1-100之间,我们可以从1到100一个个排除确定它究竟是几,但是嵌套if可以做到先排除它是1-50还是51-100,再从50-100里面一层层去确定这个数字,可以节省大量的时间,这是很多现在的算法师们研究的东西,就是说如何让一个程序节约运算成本。
switch多选择结构
-
多选择结构还有一个实现方式就是switch case语句。
-
switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
-
switch语句中的变量类型可以是:
-
byte、short、int、或者char。
-
从Java SE 7开始。
-
switch支持字符串String类型了。
-
同时case标签必须为字符串常量或字面量。
-
语法:
switch(expression){
case value:
//语句
break; //可选
case value:
//语句
break; //可选
case value:
//语句
break; //可选
......
//你可以有任意数量的case语句
default: //可选
//语句
}
但是我们操作的时候会发现:结果有三个!
public static void main(String[] args) { char grade = 'C'; switch (grade){ case 'A': System.out.println("优秀"); case 'B': System.out.println("良好"); case 'C': System.out.println("一般"); case 'D': System.out.println("再接再厉"); case 'E': System.out.println("秀儿!"); } }
这是因为,switch多选择结构语句一旦判断满足一个符合条件,后面的都会执行(这个情况叫做case穿透),所以我们要在switch语句里面添加break; 以此来结束执行。
public static void main(String[] args) { char grade = 'C'; switch (grade) { 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里面还有个default,意思是上面的都没有满足,default就是默认的,它也是可选的,放在最后,用来排除未知情况。
public static void main(String[] args) { char grade = 'M'; switch (grade) { 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; default: System.out.println("未知等级");//输入的不是case里面的ABCDE,可能是F或者其他,就会跑default } }
还有一点注意的是,jdk7开始,switch支持了字符串类型,可以识别字符串汉字。如下:
public static void main(String[] args) { String name = "文涛"; switch (name){ case "索文": System.out.println("索文"); break; case "文涛": System.out.println("文涛"); break; default: System.out.println("啥也不是!"); } }
-
JDK7新特性,表达式结果可以为字符串!!!
-
字符的本质还是数字
-
反编译 java---class(字节码文件) ---反编译(IDEA)