Java
分支语句:根据条件表达式决定执行程序的某一部分而不执行另一部分。使用控制语句可以改变程序的执行流程,这样就可以在程序中有选择地或者循环的执行某一个操作
if-else 语句
if (expression) {
statement
}
或者是
if (expression) {
statement1
}else{
statement2
}
或者
if (expression1) {
statement1
}else if(expression2) {
statement2
}else{
statement3
}
括号内的 expression 的计算结果必须为布尔值的表达式,如果程序块中只有一条语句,则可以略去花括号。但是实际开发中,建议都使用花括号, 因为可以使代码具有更好的可读性
public class IfStatment {
public static void main(String args[]) {
//如果没有输入参数则从方法返回
if(args[0].length()<=0) {
return;
}
System.out.println("您输入的成绩为: "+args[0]);
//否则将参数转换为基本数据类型
int i=0;
try {
i=Integer.parseInt(args[0]);
} catch (NumberFormatException nfe) {
System.out.println("您输入的参数格式错误! ");
return;
}
//根据分数判断等级
if(i>=90) {
System.out.println("等级为:A");
} else if(i>=80&&i<90) {
System.out.println("等级为:B");
} else if(i>=60&&i<80) {
System.out.println("等级为:C");
} else {
System.out.println("等级为:D");
}
}
}
试用 86 运行上面的代码,得到如下信息:
F:\gz\JAVA\lckz>java IfStatment 86
您输入的成绩为: 86
等级为:B
但是如果输入了非法的成绩格式,就会如下报错:
F:\gz\JAVA\lckz>java IfStatment a
您输入的成绩为: a
您输入的参数格式错误!
Switch 语句
可以看作是if 语句的另一种形式,switch 选择语句能够根据表达式的值决定执行多个操作中的一个或者几个
switch(expression) {
case expression_value1:statement1;break;
case expression_value2:statement2;break;
...
[default: default_statement;]
}
expression 是返回值为 int byte char 或 short 类型的表达式
case 子句中的 expression_value 必须是常量。 switch 根据 expression 的值在 case 各个子句中进行匹配。如果匹配成功则执行相应的语句,否则执行 default 中的语句;如果没有default , 则不会进行任何操作
case 子句中的break 用于跳出 switch 如果没有 break 则 switch 会顺序执行下个case 子句中的语句,直至遇到break 语句或者执行完所有的case 或者 default 语句
public class MainClass {
public static void main(String[] args) {
//如果没有输入参数则从方法返回
if(args[0].length()<=0) {
return;
}
System.out.println("您输入的月份为: "+args[0]);
//否则将参数转换为基本数据类型
int month=8;
try {
month=Integer.parseInt(args[0]);
} catch (NumberFormatException nfe) {
System.out.println("您输入的月份格式错误! ");
return;
}
switch (month) {
case 1: System.out.println("January");
break;
case 2: System.out.println("February");
break;
case 3: System.out.println("March");
break;
case 4: System.out.println("Aprill");
break;
case 5: System.out.println("May");
break;
case 6: System.out.println("June");
break;
case 7: System.out.println("July");
break;
case 8: System.out.println("August");
break;
case 9: System.out.println("September");
break;
case 10: System.out.println("October");
break;
case 11: System.out.println("November");
break;
case 12: System.out.println("December");
break;
default :
System.out.println("您输入的月份不存在! ");
}
}
}
输入月份 4 得到一下信息:
F:\gz\JAVA\lckz>java MainClass 4
您输入的月份为: 4
Aprill
case 参数在程序编译的时候就被解析,所以 它只能被赋值为常量值或者最终变量值
如果程序中没有使用break 语句, 则程序会与找到的case 子句匹配之后顺序执行,所以在程序中加入 break 语句,当找到匹配的 case 子句后只执行该代码就跳出 switch 语句块
public class SwitchBreak {
public static void main(String args[]) {
//如果没有输入参数则从方法返回
if(args[0].length()<=0) {
return;
}
//否则将参数转换为基本数据类型
int i=0;
try {
i=Integer.parseInt(args[0]);
} catch (NumberFormatException nfe) {
System.out.println("您输入的参数格式错误! ");
return;
}
switch(i) {
case 2:System.out.println("您输入的是2");
case 4:System.out.println("您输入的是4");
case 6:System.out.println("您输入的是6");
default:System.out.println("您输入的是奇数! ");
case 8:System.out.println("您输入的是8");
case 10:System.out.println("您输入的是10");
}
}
}
命令行输入偶数6,运行程序得到一下信息:
F:\gz\JAVA\lckz>java SwitchBreak 6
您输入的是6
您输入的是奇数!
您输入的是8
您输入的是10
并没有得到想要的结果,因为没有使用 break 语句。
在上述例子中,输入的是6,当程序运行找到匹配的case 语句后将继续执行之后的所有语句,知道遇到 break 才跳出 switch 语句块。在程序执行过程中,如果所有的值都与case语句中的值不匹配,那么就可以在程序中加入 default 语句
public class SwitchDefault {
public static void main(String args[]) {
//如果没有输入参数则从方法返回
if(args[0].length()<=0) {
return;
}
//否则将参数转换为基本数据类型
int i=0;
try {
i=Integer.parseInt(args[0]);
} catch (NumberFormatException nfe) {
System.out.println("您输入的参数格式错误! ");
return;
}
switch(i) {
case 2:
case 4:
case 6:
case 8:
case 10:System.out.println("您输入的是偶数! ");break;
default:System.out.println("您输入的是奇数! ");
}
}
}
尝试输入数字5,得到如下结果:
F:\gz\JAVA\lckz>java SwitchDefault 5
您输入的是奇数!
循环语句
while 循环语句
while(expression) {
statement
}
原理为:expression 是布尔型的变量或者是返回值为布尔型的语句, while 语句首先判断 expression 的值,如果这个值为 true 则程序执行 statement 执行结束后, while 再次判断 expression 的值,直到 expression 的值为 false 则程序跳出大括号中的语句转向下面的语句执行
public class WhileTest {
public static void main(String[] args) {
int i=0;
//当i的值小于等于4的时候循环
while(i<=4) {
System.out.println("i="+i);
i++;
}
}
}
上述例子在 i 的值小于等于4时,执行 while 循环语句,得到如下信息:
F:\gz\JAVA\lckz>java WhileTest
i=0
i=1
i=2
i=3
i=4
对于while循环,重点是, while 循环不一定会执行,因为在程序执行第一次检查时,如果expression 表达式的值返回 false 则跳过循环体,开始执行while 循环之后的语句
public class WhileTest1 {
public static void main(String[] args) {
int i=0;
while(i>2) {
System.out.println("i="+i);
//将i 的值设置为3
i=3;
}
//打印
System.out.println("循环体结束! ");
}
}
该段代码将 i 的初始值设置为0 ,而循环的条件是i>2, 所以条件为 false, 即不执行循环体:
F:\gz\JAVA\lckz>java WhileTest1
循环体结束!
while 循环没有执行的原因是因为第一次检查时, expression 表达式的值返回 false,即使在循环体中将 i 的值设置为3,但是事实上程序根本没有执行到此。
do-while 循环语句
do{
statement
}while(expression)
该语句的执行过程与while 循环语句类似,不过do-while 语句会首先执行一遍大括号中的 statement 然后再判断 expression 的值。而 while 循环语句首先检查 expression 表达式的值,然后再决定是否执行循环体中的代码
public class dowhile {
public static void main(String[] args) {
do {
System.out.println("do...while...");
} while (false);
}
}
以上代码运行后得到如下:
F:\gz\JAVA\lckz>java dowhile
do...while...
运行时,System.out.println("do...while..."); 语句执行了一次,然后 expression 表达式的值测试为 false,循环结束,循环体中的代码至少执行了一次。
for 循环语句
for(initialization;termination;increment) {
statement
}
initialization 是初始化语句,执行变量的声明和初始化。
termination 部分用于判断什么时候循环可以结束 ,需要一个布尔表达式进行条件测试
increment 部分在每一次循环结束后调用,
三个部分都不是必须的,每部分都可以是空语句,但是分号不能省略
public class ForTest {
public static void main(String[] args) {
int i=0;
for(;i<4;) {
i++;
System.out.println("i="+i);
}
}
}
如果将for 循环的所有部分都省略的话,它将成为一个死循环,因为没有循环结束的条件。如果为 for 循环加上判断部分,就相当于一个 while 循环
所以运行上述程序,得到以下结果:
F:\gz\JAVA\lckz>java ForTest
i=1
i=2
i=3
i=4
接下来尝试for 循环中各个部分的执行顺序:
public class ForTest1 {
static int i;
public static void main(String[] args) {
for(a();i<b();c()) {
System.out.println("i="+i);
}
}
public static int a() {
System.out.println("初始化");
return 0;
}
public static int b() {
System.out.println("条件测试");
return 4;
}
public static int c() {
System.out.println("增量部分");
return i++;
}
}
运行程序得到:
F:\gz\JAVA\lckz>java ForTest1
初始化
条件测试
i=0
增量部分
条件测试
i=1
增量部分
条件测试
i=2
增量部分
条件测试
i=3
增量部分
条件测试
从结果可以看出,程序首先执行初始化操作,然后进行条件测试,如果返回 ture 则执行循环体中的语句,然后执行增量部分,如此循环知道条件测试为 false 时跳出循环体,执行循环体外的下一条语句。
在循环语句中使用 break 和 continue 关键字
这两个关键字用于停止整个循环或者停止当前的循环。在使用这两个关键字时,通常是在循环体内执行一次if 条件测试,如果某个条件变成 ture 或者 false 则跳出本次循环,根据使用 break 还是 continue 来决定是执行下一次循环还是执行循环之后的语句
public class BreakContinue {
public static void main(String[] args) {
for(int i=0;i<=10;i++) {
//当i等于3时跳出循环体
if(i==3) {
break;
}
//否则打印i的值
System.out.println("i="+i);
}
System.out.println("跳出循环体");
}
}
循环体结束条件是i<=10, i 的初始值为0, 但是当i==3 为true 时跳出循环体,运行程序得到一下结果:
F:\gz\JAVA\lckz>java BreakContinue
i=0
i=1
i=2
跳出循环体
接着尝试一下使用 continue 关键字:
public class BreakContinue1 {
public static void main(String[] args) {
for(int i=0;i<=10;i++) {
//当i等于偶数时进入下一次循环
if(i%2==0) {
System.out.println("进入下一次循环");
continue;
}
//否则打印i的值
System.out.println("i="+i);
}
System.out.println("跳出循环体");
}
}
当i%==0时,停止当前循环,直接进入下一次循环,结果如下:
F:\gz\JAVA\lckz>java BreakContinue1
进入下一次循环
i=1
进入下一次循环
i=3
进入下一次循环
i=5
进入下一次循环
i=7
进入下一次循环
i=9
进入下一次循环
跳出循环体
continue 语句只能位于一个循环内,否则编译会报错,break 语句必须用在循环内或者是 switch 语句中