A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sunpeijie 中级黑马   /  2015-12-20 13:59  /  653 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.        判断
if 语句
if语句可以使程序选择是否执行某条语句.
三种格式:

1、if(条件表达式)
        {
                执行语句;
        }
2、if(条件表达式)
        {
                执行语句;
        }
        else
        {
                执行语句;
        }
3、if(条件表达式)
        {
                执行语句;
        }
        else if (条件表达式)
        {
                执行语句;
        }
        ……
        else
        {
                执行语句;
        }
If语句格式1:
if(布尔表达式){
        语句;
        ...
}
该语句的特点:当且仅当条件为true时执行一个动作。


if就是如果的意思。括号里边是条件表达式,只要是条件表达式,就会有true 和false。 那么我就通过if 语句控制来了某些语句的执行。条件满足就会执行if 控制区间内的代码,什么是控制区间,就是一对{}之间的。
     如果if 控制的语句只有一条那么,括号可以省略不写.也就是说如果if 后没有大括号,那么if 只控制离if最近的语句.建议初学者加上{}
       
int i=100;
                if(i>0){
                        System.out.println("大于0");
                }
        如果花括号内只有一条语句可以省略花括号
               
int i=100;
                if(i>0)
                        System.out.println("大于0");
               
If语句第二种格式:
If语句的第一种格式只有当条件表达式为真的时候才执行操作,但条件为假的时候什么也不做。假如希望在条件为false的时候也做一些动作。那么就可以使用第二种格式的语句。根据条件为true和flase分别执行不同的动作。

语法:
if(布尔表达式){
                        布尔表达式为真时执行语句;
                        ...
                }else{
                        布尔表达式为假时执行语句;
                        ...
}


观察发现if else语句有点类似于三元运算符.其实三元运算符是if else 的一种简写格式.
  
public static void main(String[] args) {
                int x = 0, y = 1, b;
                // if else 语句
                if (x > y) {
                        b = x;
                } else {
                        b = y;
                }
                System.out.println(b);// 1
                // 3元运算
                b = x > y ? x : y;
                System.out.println(b); // 1
}
这两种格式是一样的。if else 结构 简写格式: 变量 = (条件表达式)?表达式1:表达式2;
三元运算符:
好处:可以简化if else代码。
弊端:因为是一个运算符,所以运算完必须要有一个结果。

If语句第三种格式
需求: 根据用户定义的数值不同,打印对应的星期英文。if 只能进行一层判断,if else 只能进行两层判断,那么需要多层判断时呢?星期可是有7个数的。如何设计代码?
星期英文 Monday Tuesday Wednesday Thursday Friday  Saturday Sunday        方案一:使用if 语句
public static void main(String[] args) {
                int x = 8;
                if (x == 1) {
                        System.out.println("星期一");
                }
                if (x == 2) {
                        System.out.println("星期二");
                }
          …
                }

如果这样设计的话,第一个if语句执行完毕后,第二个语句仍会执行(去判断),是一个顺序结构.那么事实上当前定义的星期之后会有一个.假如,第一个已经符合条件,那么剩余的执行就没有意义了。属于逻辑错误。
使用if else ,如果用户输入的是7以外的数据,那么怎么处理?就需要使用else 了
方案2:使用if else if语句
public static void main(String[] args) {
                int x = 8;
                if (x == 1) {
                        System.out.println("星期一");
                } else if (x == 2) {
                        System.out.println("星期二");
                }
          …
else {
                        System.out.println("请输入数字1-7");
                }
}

if语句特点

1、每一种格式都是单条语句。
2、第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以写在其他表达式中。
3、条件表达式无论写成什么样子,只看最终的结构是否是true 或者 false。
仔细观察:发现if和else if要执行的语句是一样的,可不可以合并呢。当然是可以的。怎么合并?使用逻辑运算符,那么使用哪个逻辑运算符呢, &肯定不行。需要全部为真才为真,月份是不可能同时满足的 那么使用|连接符号即可。意思只要其中一个为真,就为真。另外可以使用短路功能。


public static void main(String[] args) {
                int x = 1;
                if (x == 3 || x == 4 || x == 5) {
                        System.out.println("spring");
                } else if (x == 6 || x == 7 || x == 8) {
                        System.out.println("Summer");

                } else if (x == 9 || x == 10 || x == 11) {
                        System.out.println("autumn");
                } else if(x==12||x==1||x==2){
                        System.out.println("Winter");
                } else {
                        System.out.println("月份不存在");
                }
        }

If语句常见的错误:
1忘记必要的括号:如果代码块中只有一条语句的时候,可以省略花括号,但是当花括号将多条语句扩在一起时,花括号就不能在省略。

2if语句后出现分号

3布尔值的测试
double radius = 0;
                double area;
                boolean flag=true;
                if (flag==true){
                        area = radius * radius * 3.14;
                        System.out.println("The area " + " is " + area);
                }
其中的布尔表达式很容易写成flag=true,并且flag本来就是布尔类型的值。没有必要在进行真假判断。
double radius = 0;
                double area;
                boolean flag=true;
                if (flag){
                        area = radius * radius * 3.14;
                        System.out.println("The area " + " is " + area);
                }

2.选择结构
switch语句
格式:
switch(表达式)
{
        case 取值1:
                执行语句;
                break;
        case 取值2:
                执行语句;
                break;
        …...
        default:
                执行语句;
                break;
}
switch语句特点:
    1,switch语句选择的类型只有四种:byte,short,int , char。
2,case之间与default没有顺序。先执行第一个case,没有匹配的case执行
default。
        3,结束switch语句的两种情况:遇到break,执行到switch语句结束。
        4,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运
行可以执行的语句,直到遇到break或者switch结尾结束。
        5,switch case中的值必须要与switch表达式的值具有相同的数据类型。而且case后跟的值必须是常量,不能跟变量。

案例:
public static void main(String[] args) {
                int x = 3;
                switch (x) {
                case 1:
                        System.out.println("1");
                        break;
                case 2:
                        System.out.println("2");
                        break;
                case 3:
                        System.out.println("3");
                        break;
                default:
                        System.out.println("ok");
                        break;
                }
}
case 就像选择题的答案之一。 break 就是如果该答案正确那么就可以跳出switch 了,意思就是说 已经找出了正确的答案了。那么这道题也就做完了。如果 case 没有匹配接着进行下一个case 匹配,直到匹配为止。 最后如果都没有匹配上,那么 switch 给提供了一个默认的答案,就是 default。
注意: case后跟的是冒号:
每个case中的执行语句一定要加break;

练习:char 类型在switch 中的使用.
public static void main(String[] args) {
                int x = 1, y = 2;
                char ch = '*';
                switch (ch) {
                case '+':
                        System.out.println("x*y=" + (x + y));
                        break;
                case '-':
                        System.out.println("x-y="+(x-y));
                        break;
                case '*':
                        System.out.println("x*y="+(x*y));
                        break;
                case '/':
                        System.out.println("x/y="+(x/y));
                        break;
                default:
                        System.out.println("不靠谱");               
}
}

if 和switch 语句很像.
具体什么场景下,应用哪个语句呢?
如果判断的具体数值不多,而是符号byte,short int char 四种类型.
虽然2个语句都可以使用,建议使用switch语句.因为效率稍高.
其他情况:对区间判断,对结果为boolean 类型判断,使用if if的使用范围更广。
if 除了能判断具体数值还能判断区间。switch 判断区间会费劲。要写好多case 对于运算结果是boolean型的 if 能判断 switch 是不能实现的。例如:根据学生考试成绩划分ABCD   A90-100  B80-89 C70-79 D60-69 E0-59
实际开发怎么选择呢。
    如果要对具体数值进行判断,并且数值不多,那么 就用switch 来完成。 Switch 是一开始就全部加载进了内存,而if 语句要顺序执行,需要多个if 和else if 执行过程就要比switch 稍微多了一点。
但是switch 的局限性比较大必须是4种类型,并且值不多。一般都是使用if。 最后在jdk 7中对switch 进行了增强 还可以判断字符串。5.0 增加了对枚举的判断。


2 个回复

倒序浏览
写了这么多,学习了
回复 使用道具 举报
很不错,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马