条件分支
在程序开发过程中,经常遇到逻辑分支问题,也就是条件和选择,满足什么样的条件,执行那一部分代码块。Java对于条件选择有两种方式实现,分别是if语句和switch语句。
if语句
if语句本身是条件判断语句,为真执行,为假不执行。在用法上又可以分为三种形式。
- :条件为真就执行,否则不执行。
package test
public class SelectTest(){
/**
* 如果考试分数大于等于90分,那么输出优秀
* @param sorce 考试的成绩
*/
public void excellent(int score){
if(score >= 90){
System.out.println("优秀");
}
}
}
可以看出该方法的逻辑处理只有一个分支,条件为真就执行
- 条件为真执行A代码块,否则执行B代码块。
package test
public class SelectTest{
/**
* 如果考试分数大于等于90分输出优秀;否则输出继续努力
* @param sorce 考试的成绩
*/
public void isExcellent(int score){
if(score>= 90){
System.out.println("优秀");
}else {
System.out.println("继续努力");
}
}
}
该方法的逻辑有两个分支,并且必定会选择其中一个分支,else的作用就是如果以上条件都不满足,那么执行该代码块中的语句
- 多个条件判断,分别进入不同的代码块
package test
public class SelectTest{
/**
* 如果考试分数大于等于90分输出优秀
* 如果大于等于80输出良好
* 如果大于60等于输出及格
* 否则输出不及格
* @param sorce 考试的成绩
*/
public void isExcellent(int score){
if(score>= 90){
System.out.println("优秀");
}else if(score>= 80){
System.out.println("良好");
}else if(score>= 60){
System.out.println("及格");
}else {
System.out.println("不及格");
}
}
}
这里有多个分支,需要注意的是它们的顺序。它们的条件判断是从上至下的,当有条件满足时,就执行当前代码块中的代码,并结束此次选择。比如考试成绩sroce=90,因为先满足第一个分支,那么只会输出优秀,并结束。不会输出良好和及格。
switch语句
另一种分支选择就是switch语句,switch语句一般是针对有固定条件分支的选择,列如今天是星期几,和if不同的是if语句的条件是一个boolean的值,只要是一个逻辑判断,那么就可以作为if语句的条件,而switch的条件必须为 :byte、short、int、char、Byte、Short、Integeer、Character、String或者enum。String是java1.7才开始支持的,java1.7之前的版本不支持String.
package test
public class Test{
public static void main(String[] args) {
int week = 1;
switch (week) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("不好意思,超出了我的认知!");
}
}
}
需要注意的是,和if语句不同,if语句会在满足条件的时执行当前代码块并结束,而switch在满足条件时不会主动结束,而需要用break来显示的结束,否则会继续向下执行。例如下面代码,从星期二开始匹配成功,但因为没有break结束,则会继续向下输出星期三、星期四、星期五,此时有break结束本次分支选择,不再继续向下执行。
package test
public class Test{
public static void main(String[] args) {
int week = 2;
switch (week) {
case 1:
System.out.println("星期一");
case 2:
System.out.println("星期二");
case 3:
System.out.println("星期三");
case 4:
System.out.println("星期四");
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
case 7:
System.out.println("星期日");
default:
System.out.println("不好意思,超出了我的认知!");
}
}
}
循环遍历
Java循环遍历的方式也分为两种,分别为for循环和while循环
for循环
package test
public class ForTest{
public static void main(String[] args){
// 循环输出0~9
for(int i=0; i<10; i++){
System.out.println(i);
}
}
}
增强for循环
增强for循环是针对数组和可迭代的集合设计的,它会循环变量容器中的每一个元素
package test
public class ForTest{
public static void main(String[] args){
// 定义一个数组
int[] intArray = {1,2,3,4,5,6,7,8,9,10};
// 增强for循环会将数组的元素挨个遍历一遍
for(int i : intArray){
System.out.println(i);
}
}
}
增强for循环适合用在需要遍历数组或可迭代集合中的每一个元素时,但相对普通for循环来说,普通for循环更加灵活,普通for循环可以自由的定义循环的次数,每次的增量等。
while循环
while循环的语法为下
while(boolean值){
}
()里是一个boolean的值turn或false,当值为turn是,执行循环体,直到值为false时,结束循环,否则就会一直循环下去。
package test
public class WhileTest{
public static void main(String[] args){
int i = 0;
while(i<10){
System.out.println(i);
i++;
}
}
}
do…while 循环
package test
public class WhileTest{
public static void main(String[] args){
int i = 0;
do{
System.out.println(i);
i++;
}while(i<10);
}
}
do…while和while的区别是while会先检查boolean值,然后再决定是否执行循环体,而do…while是先执行一遍循环体,然后在检查boolean值,例如,将上面示例的int i = 10;while循环不进入循环体,而do…while进入一次循环体,然后结束。
中断循环
目前为止,无论是for循环还是while循环,它们都是需要执行完毕才能结束循环,但在实际的业务开发中,经常遇到需要提前结束循环。java中用来提前结束循环的关键字有两个,分别是continue和break;有一些人可能认为return也可以终止循环,但笔者认为return是用于返回方法返回值别结束方法的关键字,
- continue: 结束当前循环
package test
public class ForTest{
public static void main(String[] args){
// 循环输出0~9,当为5时,跳过本次循环
for(int i=0; i<10; i++){
if(i == 5){
continue;
}
System.out.println(i);
}
}
}
- break :结束循环,并跳到指定循环体外,如果不指定,这结束该循环
package test
public class ForTest{
public static void main(String[] args){
// 嵌套循环,当j=5时,结束循环
for(int i=0; i<10; i++){
for(int j =0; j<10;j++){
if(j == 5){
break;
}
System.out.println(i+","+j);
}
}
}
}
package test
public class ForTest{
public static void main(String[] args){
// 嵌套循环,当j=5时,结束循环
a:
for(int i=0; i<10; i++){
for(int j =0; j<10;j++){
if(j == 5){
break a;
}
System.out.println(i+","+j);
}
}
}
}
以上是break的两种用法,break后如果不跟标记,那么结束当前的循环体,如果跟上标记,那么可以结束标记所在的循环体,此时可以结束多重嵌套循环。