一、if ... else if ...else
判断多个条件的时候使用,示例代码如下:
public class TestDemo1 {
public static void main(String[] args) {
int a = 10;
if (a == 1)
{
System.out.println("xxxxx");
}
else if (a == 5)
{
System.out.println("yyyyy");
}
else if (a == 10)
{
System.out.println("zzzzz");
}
else
{
System.out.println("doesn't exist!");
}
}
}
输出结果:zzzzz
这是正常的使用情况。但是,如果你的条件满足其中多个分支并且你希望都执行时,这样做逻辑上是错误的。示例代码如下:
public class TestDemo {
public static void main(String[] args) {
int a = 6;
if (a > 1)
{
System.out.println("xxxx");
}
else if (a > 2)
{
System.out.println("yyyy");
}
}
}
输出结果:xxxx
以上代码中,a > 1 并且 a > 2, 但是这里只会输出:xxxx, 不会执行yyyy的输出。因为if ...esle if 当前面有一个分支满足条件时,之后的分支即使有满足条件的也不会执行。此时应该使用两个独立的if语句即可。代码示例如下:
public class TestDemo2 {
public static void main(String[] args) {
int a = 6;
if (a > 1)
{
System.out.println("xxxx");
}
if (a > 2)
{
System.out.println("yyyy");
}
}
}
输出结果:xxxx
yyyy
以上的问题很小,但是不可小视,否则会在开发中带来很大麻烦。
二、switch ... case ...
一种很简便的选择语句,switch(a),其中a只支持数字,字符,枚举(1.5之后)
代码示例:
public class TestDemo3 {
public static void main(String[] args) {
int a = 5;
switch (a)
{
case 1 :
System.out.println("xxxx");
case 5 :
System.out.println("yyyy");
case 10 :
System.out.println("zzzz");
default :
System.out.println("doesn't exist!");
}
}
}
输出结果:yyyy
zzzz
doesn't exist!
以上结果可以看出,匹配到符合条件的case分支时,开始执行,一直到switch的结束。如果没有符合条件的case分支语句时, 就执行default语句(没有default就什么都不执行)。但是,我们只希望执行yyyy,解决办法是在每一个case语句后面加上break语句,让程序跳出switch语句。正确使用的代码示例如下:
public class TestDemo3 {
public static void main(String[] args) {
int a = 5;
switch (a)
{
case 1 :
System.out.println("xxxx");
break;
case 5 :
System.out.println("yyyy");
break;
case 10 :
System.out.println("zzzz");
break;
default :
System.out.println("doesn't exist!");
}
}
}
结合枚举使用switch, 示例代码:
enum Color { //不可以用public来修饰,因为Color本质是一个类,而在一个Java文件中,至多有一个public类
RED, BLUE, BLACK;
}
public class TestDemo4 {
public static void main(String[] args) {
Color c = Color.BLUE;
switch (c){ //等价于Color.BLUE
case RED : //Color.RED 会报错
System.out.println("red");
break;
case BLUE :
System.out.println("blue");
break;
case BLACK :
System.out.println("black");
break;
default :
System.out.println("error");
}
}
}