【黑马程序员】语法、四大语句——Java复习笔记

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

本章内容包括:

运算符;
键盘录入;
流程控制语句;

运算符

(1)算术运算符
    +的用法
        a:加法        b:正号        c:字符串连接符
    ++和--的用法
        放在操作数的前面:先自增或者自减,再参与操作
                    int a = 10;     
                    int b = ++a;   //a=11,b=11
        放在操作数的后面:先参与操作,再自增或者自减
                    int a = 10;
                    int b = a++;  //a=11,b=10
        例题:
        int x = 4;
        int y = (x++)+(++x)+(x*10);
        //4+6+60=70

(2)赋值运算符
    扩展的赋值运算符(+=,-=,*=,/=,%=)的特点:隐含了自动强制转换。      
            short s = 1;
            s = s + 1; 报错,此处需要强转

            short s = 1;
            s += 1; 不会报错 因为+=隐含了强转

(3)比较运算符
    无论运算符两端简单还是复杂最终结果是boolean类型。
    千万不要把==写成了=

(4)逻辑运算符
    &,|,^(这三个,两边是布尔类型则是逻辑运算。两边是数值则是位运算),!,&&,||
    逻辑运算符用于连接boolean类型的式子
    结论
        &:有false则false
        |:有true则true
        ^:相同则false,不同则true。
        !:非true则false,非false则true
        &&:结果和&一样,只不过有短路效果。左边是false,右边不执行。
        ||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。

(5)位运算符
    首先要把数据转成二进制 都用补码计算 
    3的二进制:11  
    00000000  00000000  00000000  00000011
    4的二进制:100
    00000000  00000000  00000000  00000100
    例子都为正数,原码反码补码一样

    &位与运算:有0则0
    00000000  00000000  00000000  00000011
   &00000000  00000000  00000000  00000100
    ---------------------------------------
    00000000  00000000  00000000  00000000
    结果为0

    |位或运算:有1则1        结果为7

    ^位异或运算:相同则0,不同则1   结果为7

    ~按位取反运算:0变1,1变0  如 ~3=-4计算过程如下
    00000000 00000000 00000000 00000011  (-3)
 ~得结果为11111111 11111111 11111111 11111100  (这个数是补码)
    转换成原码为 
    100000000 00000000 00000000 00000100即-4


    A:^的特殊用法
        一个数据对另一个数据位异或两次,该数不变 如3^4^4结果为3

    B:面试题
        a:请实现两个变量的交换
            **用位异或运算符
                int a = 10;int b = 20;
                a = a ^ b;
                b = a ^ b;  
                a = a ^ b;最后输出为a=20,b=10
            **第三种方法:b = (a+b) - (a=b);一句话搞定

        b:请用最有效率的方式计算出2乘以8的结果
            最有效率即用位移运算,因为电脑运算的时候都是转化为位移运算的。2<<3=8

(6)三元运算符
    A:格式
        比较表达式?表达式1:表达式2;

    B:执行流程:
        首先计算比较表达式的值,看是true还是false。
        如果是true,表达式1就是结果。
        如果是false,表达式2就是结果。

(7)位移运算符
    <<左移,左边丢弃,右边补0        

    >>右移,最高位是什么就补什么

    >>>无符号右移,都补0

    3<<2=12 即3左移两位。简便方法(负数同理):结果为3*2^2=12,把<<左边的数据乘以2的移动次幂,同理,>>为除以

键盘录入

import java.util.Scanner; //导入包
Scanner sc = new Scanner(System.in);  //创建对象
int x = sc.nextInt();  //获取输入的数字

流程控制语句

(1)顺序结构 从上往下,依次执行

(2)选择结构 按照不同的选择,执行不同的代码  if  switch

(3)循环结构 做一些重复的代码 for,while,do...while

if语句

(1)注意事项
    A:比较表达式无论简单还是复杂,结果是boolean类型

    B:if语句控制的语句体如果是一条语句,是可以省略大括号的(不建议);如果是多条,不能省略。

    C:一般来说,有左大括号,就没有分号,有分号,就没有左大括号。

    D:else后面如果没有if,是不会出现比较表达式的。

    E:三种if语句其实都是一个语句,只要有一个执行,其他的就不再执行。

(2)三元运算符和if语句第二种格式的关系
    三元运算符能够实现的,if else都能实现,反之不成立。

    如果if语句的else语句体是输出语句,就不可以。因为三元运算符是一个运算符,必须要有一个结果返回,不能是一个输出语句。

switch语句

(1)格式解释说明:
    switch接收的参数:可以是byte,short,int,char
        JDK5以后可以是枚举
        JDK7以后可以是字符串

(2)注意事项:
    A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的

    B:break可以省略,但是结果可能不是我们想要的。会出现一个现象:case穿透。

    C:default可以在任意位置。但是建议在最后。

    D:switch语句的结束条件
        a:遇到break就结束了
        b:执行到末尾就结束了

(3)if语句和switch语句各自的场景
    A:if
        针对boolean类型的判断
        针对一个范围的判断
        针对几个常量的判断

    B:switch
        针对几个常量的判断
(4)case穿透案例
        /**
         * 穿透案例
         * 两个case都不是2,则执行default,因为没有break所以执行完default会按顺序继续执行,直到遇见break或者全部执行完毕才结束
         */
        int x = 2,y=3;

        switch(x)
        {
            default:
                y++;
            case 3:
                y++;
                break;
            case 4:
                y++;
        }

        System.out.println("y="+y);//y=5

循环语句for,while,do…while

(1)for循环语句
    注意事项
    a:判断条件语句无论简单还是复杂,结果是boolean类型
    b:有分号就没有左大括号,有左大括号就没有分号

(2)while循环
    for和while的区别  (优先用for循环)
        a:使用上的区别
            for语句的那个控制条件变量,在循环结束后不能在使用了。而while的可以继续使用。

        b:理解上的区别
            for适合于一个范围的判断,while适合次数不明确的

(3)do...while循环
    三种循环的区别
        a:do...while循环至少执行一次循环体
        b:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体

(4)循环使用的注意事项(死循环)
    A:最简单的死循环格式
    B:优先使用for,其次while,最后考虑do while          

控制跳转语句

(1)break:中断
    B:作用
        a:跳出单层循环
        b:跳出多层循环,需要标签语句的配合
        如: wc:for(……){
                nc:for(……){
                        break wc;}} 
        则可跳出多层循环

(2)continue:继续
    A:作用
        跳出单层循环的一次,可以继续下一次

    B:填空题
        for(int x=1; x<=10; x++) {
            if(x%3 == 0) {
                //补齐代码
            }
            System.out.println("Java基础班");
        }
        让控制台输出2次:Java基础班 break
        让控制台输出7次:Java基础班  continue
        让控制台输出13次:Java基础班 sout

(3)return:返回
    用于结束方法,一旦遇到return,程序就终止,不会再执行方法内后面的内容。

练习

1.求1-100偶数和 奇数和

        int jishu=0;
        int oushu=0;
        int sum = 0;
        for (int i = 1;i<=100;i++){
            if(i % 2 == 0){
                oushu +=i;
            }else{
                jishu+=i;
            }
            sum+=i;
        }
        System.out.println("偶数和"+oushu+" 奇数和"+jishu+" 总和"+sum);

2.求n的阶乘

        //键盘输入n
        Scanner sc = new Scanner(System.in);
        //阶乘最后乘到1,创建1的大数对象
        BigInteger num = BigInteger.valueOf(1);
        //获取n,并在循环内用BigInteger的multiply方法求乘积
        for (int i =sc.nextInt();i>0;i--){
            num = num.multiply(BigInteger.valueOf(i));
        }

        System.out.println(num);

3.输出所有的水仙花数:135=1*1*1+3*3*3+5*5*5 即一个三位数,各个数字的立方和为其本身

方法1:遍历每一个三位数,先放入StringBuilder,然后charAt配合 “- “运算符获取三个数字

        int a,b,c,sum ;

        StringBuilder sb = new StringBuilder();
        for (int i =100;i<1000;i++){
            sb.append(i);
            //480
            a = sb.charAt(0)-48;
            b = sb.charAt(1)-48;
            c = sb.charAt(2)-48;
            sum = a*a*a+b*b*b+c*c*c;
            if(sum == i){
                System.out.println(i);
            }
            sb.delete(0,sb.length());

        }

方法2:用求余的方法获取三位数的每个数字

        int a,b,c,count=0;
        for(int i =100;i<1000;i++){
            a = i % 10;      //各位
            b = i/10 %10;    //十位
            c = i/100 %10;   //百位
            if (i == a*a*a+b*b*b+c*c*c){
                System.out.println("水仙花数为"+i);
                count++;
            }

        }
        System.out.println("水仙花数总共有"+count+"个");

4.厚度0.01m的无限大的纸 折叠多少次可以超过8848m?

        double houdu=0.01;//定义厚度
        int count1 = 0;//定义次数
        //厚度小于8848就折叠. 折叠一次,厚度翻倍
        while(houdu<8848){
            houdu *= 2;
            count1++;
        }
        System.out.println("折叠"+count1+"次");

5.打印图案
*
**
***
****
*****

        //外层for循环控制行数
        int hang = 5;
        for(int i = 0;i<hang;i++){
            //内层for循环控制列数
            for (int y = 0;y<=i;y++){
                System.out.print("*");
            }
            System.out.println();
        }

6.打印底边长5个*的等腰三角形
方法:先打空格再打星

        //q是行数,w是打空格的列数,e是打*的列数
        int q,w,e;
        for (q = 0;q < 3;q++){
            //空格只有两列,第一列两个空格,第二列1个空格
            for (w = 0 ;w<2-q;w++){
                System.out.print(" ");
            }
            //每行打印完空格紧接着打印* 每行打印 5-2*该行空格数 个*
            for (e = 0;e<5-2*w;e++){
                System.out.print("*");
            }
            System.out.println();
        }

7.输出九九乘法表

        //外层for控制*号左边的数 即多少行
        for(int i = 1;i<=9;i++){
        //内层for控制*号右边的数 即多少列
            for (int y = 1;y<=i;y++){
            //把内外层拼接,并拼上相乘的结果,最后再加个制表符对齐
                System.out.print(i+"*"+y+"="+i*y+"\t");
            }
            //每打完一行就换行
            System.out.println();
        }

8.小明每天存2.5 每到5的倍数就花6块,求过多久就存够100

        double money=0;
        int day = 0;
        //这里指的是每天最终剩100需要多少天
        while(money<100){
            //每天的零花钱进账,先计算存
            money +=2.5;
            day++;
            //5的倍数天的支出
            if (day % 5 == 0){
                money = money -6;
            }
            //达到条件 break
            if (money >=100){
                System.out.println(day+"天");
                break;
            }
        }

9.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值