Java基础Day2

一、运算符
1.位运算符  
  • 按位与  A&B
    将A与B转化成二进制,右侧对齐,上下比较, 每个位值两者都为1结果才为1,否者尾0,最后把结果转化成十进制。
    int result1=12&3;//1100 & 11   --> 0000 --》0
            System.out.println(result1);//0
            int result2=12&11;
            System.out.println(result2);//8
  • 按位或 A|B
     将A与B转化成二进制,右侧对齐,上下比较, 每个位值两者只要有一个为1结果才为1,否则为0,最后把结果转化成十进制
    
    int result3=12|11;
            System.out.println(result3);//15
  • 按位异或 A^B
     将A与B转化成二进制,右侧对齐,上下比较,每个位值两者相同则为0,不同则为1.最后把结果转化成十进制
    int result4=12^11;
            System.out.println(result4);//7
  • 反码运算  ~
    将二进制中的0换成1,1换成0
    /*反码运算  ~:将二进制中的0换成1,1换成0*/
           int result5=~11;
             //11求反为负数,负数--》求反+1,故原式相当于加1(求反 求反 +1)
            System.out.println(result5);//-12
  • 移位运算
    向左移位(右侧补0,放大倍数) <<
    向右移位(左侧补符号位)  >>
    向左移位(右侧补0)  >>>
    向右移位(左侧补0)  >>>
    int result6=3<<2;//放大倍数,移动2位就是放大2^2
            System.out.println(result6);
              //-1:111111……11
            int result7=-1>>2;//放大倍数,移动2位就是放大2^2
            int result8=3>>2;
            System.out.println(result7);
            System.out.println(result8);
    
            //>>>  空出来的补0
            System.out.println(Integer.MAX_VALUE);//2147483647
            int result9=-1>>>1;
            System.out.println(result9);//2147483647
  • 补充1:3*8 最快的计算方法 :3<<3
  • 补充2: 3*16 最快的计算方法 :3<<4
  • Integer.MAX_VALUE:最大值--2147483647
  • 交换数值测试小例
    //交换数值测试小例
            //方法1:第三变量  ---什么类型都可以使用
            int a=11;
            int b=22;
            int t=a;
            a=b;
            b=t;
            System.out.println(a+"___"+b);
    
            //2.加法运算的方法
            a=a+b;//   a=33   b=22;
            b=a-b;//   a=33   b=11;
            a=a-b;//   a=22   b=11;
            System.out.println(a+"___-----"+b);
    
            //3.异或运算的形式
            a=a^b;  //   a=29       b=22;
            b=a^b;  //   a=29       b=11;
            a=a^b;  //   a=22       b=11;
            System.out.println(a+"___-----___"+b);
    
  • &与&&有什么不同?
  • 按位与:a&b是把a和b都转换成二进制数然后再进行与的运算;

    逻辑与:a&&b就是当且仅当两个操作数均为 true时,其结果才为 true,只要有一个为false,a&&b就为false。&&进行的是短路判断,即如果左侧的表达式的结果为false,整个的结果就为false,不再计算右侧的表达式的值。

  • /*  &   |  也可以对布尔值运算,得到布尔值*/
            boolean bool=true & false;//运算结果与&&和||一样,但是过程不一样
            a=12;b=12;
            bool=a++<12&b++>12;//$每位二进制都进行与运算,不会出现短路现象
            bool=a++<12&&b++>12;//有短路现象
2.赋值运算
赋值运算  ==  +=  -=  *=  /=   %=
//赋值运算  ==  += -= *= /=  %=
        byte a = 12;
        a += 2;//将a的值乘2再赋值给2,不能单纯理解为a=a+2
        //a=+2;//a等于正2
        //a=a+2;//报错,需要强制转换
        System.out.println(a);
        a = 33;
        a *= 22;
        System.out.println(a);
        a = 33;
        a %= 22;
        System.out.println(a);
3.三元运算        A?B:C
 /*三元运算A?B:C*/
        int t = 12 > 34 ? 11 : 77;  //三元运算     A?B:C
        int result = 12 > 34 ? 11 : 23;
        System.out.println(result);
        result = 12.2 != 33.99 ? 'a' : 33;
  • 注意点:true ?3:12.3 
  •  结果是3.0(可以理解为一个容器内既可以放int又可以放float,那么这个至少是一个float类型)
    //12.2+3   ? double
            System.out.println(true ? 3 : 4.0);//3.0
            System.out.println(12 / 0);
二、流程控制语句
1.if else
 //有一个if就会有一个代码块执行(else if不算)
       System.out.println("请输入成绩!");
        Scanner sc=new Scanner(System.in);
        int i = sc.nextInt();

        if(i>85){
            System.out.println("优秀");
        }else  if(i>70){
            System.out.println("良好");
        }else  if(i>60){
            System.out.println("及格");
        }else {
            System.out.println("不及格");
        }
       sc.close();

2.Switch  case
  • (1)执行顺序:如果匹配到某一个case项,就从这个项开始运行,一直运行到break,或者代码快结束,如果所有的case项都没有匹配成功,才会执行default相关代码,此代码没有break后面都会执行。
    (2)细节1.case项与default的顺序可以是错乱的,但是执行顺序不会乱
    (3)细节2.switch 可以匹配的数据类型:byte short int char String Enum(枚举)
System.out.println("请输入月份");
        Scanner scan=new Scanner(System.in);
        int i1 = scan.nextInt();
        switch(i1){
            case 1:
            case 2:
            case 3:
                System.out.println("春季");
                break;
            case 4:
            case 5:
            case 6:
                System.out.println("夏季");
                break;
            case 7:
            case 8:
            case 9:
                System.out.println("秋季");
                break;
            case 10:
            case 11:
            case 12:
                System.out.println("冬季");
                break;
            default:
                System.out.println("月份输入错误,请重新输入");

        }
        scan.close();

三、循环语句

1.while循环
  • 在一些条件下可能没有for 循环,但一定有while循环
  • for循环:明确知道循环次数
    while循环:知道循环条件
  • while 先判断执行条件,满足再执行
    do while 先执行一边,再判断条件(至少执行一次)
  • int i=0;
            while(i<5){
                i++;
                System.out.println("A");
            }
    
           //测试:打印
           i='a';
            while(i<='d'){
                System.out.println((char)i);
                i++;
            }
    

2.do while 循环

至少执行1次

  //do while 循环
        i=0;
        do{
            System.out.println("--------条件不成立");
        }while(i>20);
3.for循环
 /*  for(;;){
            //死循环
        }*/
        for(int n=0;n<10;n++){
            System.out.println("循环第"+(n+1)+"次");
        }
4.练习小测:
(1)猫抓老鼠,猫重量大于老鼠,则成功抓取老鼠,否者失败,且抓一只老鼠生一只
//练习:猫抓老鼠,猫重量大于老鼠,则成功抓取老鼠,否者失败,且抓一只老鼠生一只
        Math.random();//生成[0,1)范围的随机数
        int cat=100;
        int mouse=(int)(Math.random()*120)+1;
        int count=0;
        while(cat>mouse){
               count++;
               mouse=(int)(Math.random()*120)+1;
        }
        System.out.println("猫一共抓了"+count+"只老鼠");

(2)累加1-100

(3)累加100以内3的倍数

//累加1-100
        int total=0;
        for(int i1=1;i1<=100;i1++){
            total+=i1;
        }
        System.out.println(total);
      //累加100以内3的倍数
        int num1=0;
        for(int i1=0;i1<100;i1++){
            if(i1%3==0){
                num1=num1+i1;
            }

        }
        System.out.println(num1+"-----------");

5.break与continue的区别

  • break:结束所在循环体
    continue:停止此次循环,跳到下一次循环
     //break;//结束所在循环体
            //continue;//停止此次循环,跳到下一次循环
            for(int aa=0;aa<100;aa++){
                if(aa%7==0){
                    //break;//结束所在循环体
                    continue;//停止此次循环,跳到下一次循环
                }
                System.out.println(aa);
    
            }

6.break跳出多重循环与建立锁对象跳出多重循环


        /*2.定义一个锁变量,跳出多重循环*/
        boolean bool=true;
        for(int cc=0;bool&&cc<10;cc++){
            for(int dd=0;bool&&dd<3;dd++){
                for(int bb=0;bb<100;bb++){
                    if(bb==50){
                        bool=false;
                    }
                }
            }
        }

     /*1.break 跳出多重循环,需要跳出的循环可以取别名例如a*/
        a:for(;;){
            for(;;){
                for(int bb=0;bb<100;bb++){
                    if(bb==50){
                        break a;
                    }
                }
            }
        }

7.死循环与无限循环

  • 死循环:没有结束循环的条件
    无限循环:结束循环的条件永远达不到
死循环代码后代码会报错,不可以编写其他代码, 因为程序认为死循环下的代码永远达不到,无限循环则不会报错,其下可以编写其他代码
  /*死循环:没有结束循环的条件
        * 无限循环:结束循环的条件永远达不到*/
        int a=0;
        while(a<100000000){a--;}//实际上不可能无限循环,因为a的值1亿多--
        while(a<1000){a--;}//可能无限循环
        for(;;){

        }
        //while(true){}//死循环---
        // 死循环代码后代码会报错,不可以编写其他代码,
        // 因为程序认为死循环下的代码永远达不到,无限循环则不会报错,其下可以编写其他代码

四、数组

1.数字声明定义

三种定义方式:

//声明 int[]arr;
        //定义--静态的
        int[]arr={12,52,137};
        int[] arr2=new int[]{23,56};
        //定义--动态的
        int[] arr1=new int[4];//长度定义范围   【4】代表可以存放4个元素


//实际上也可以采用此种方法,但是一般不采用

         int arr3[] ={2,3,4,5};

2.数组的限定
  • 数组限定:
    * 1.只能存放指定类型的数据
    * 2.数组的长度是不可变的  
  • 数字相关方法
    获取数组长度 length                 Arrays.toString(arr)
  • /*使用数组的元素---下标:从0开始,依次增加*/
            System.out.println(arr[2]);
            System.out.println(arr);//[I@1b6d3586  地址
    
            arr[0]=66;
            System.out.println(Arrays.toString(arr));//[66, 52, 137]
    
            //获取数组长度 length
            System.out.println(arr.length);//3
            System.out.println("-----------");
3.二维数组定义
 /*二维数组*/
        int[][]arrs=new int [4][2];//4个元素,每个元素有2个数据
        arrs[0][1]=12;
        System.out.println(Arrays.toString(arrs));//[[I@4554617c, [I@74a14482, [I@1540e19d, [I@677327b6]
        System.out.println(Arrays.deepToString(arrs));//[[0, 12], [0, 0], [0, 0], [0, 0]]
4.二维数组的限定
  • 一维数组个数不可变,一维数组必须是int类型的数组
  • 二维数组在不确定的情况下,第一个元素可以空,但第二个元素不可以空,一定要有值,例:int a[][5];
  •  arrs[2]=new int[]{1,2,3,4};
            System.out.println(Arrays.deepToString(arrs));//[[0, 12], [0, 0], [1, 2, 3, 4], [0, 0]]
        /*声明一个随机数,使用随机数为每个元数赋值*/
           int[][] arrC=new int[5][4];
           for(int i=0;i<arrC.length;i++){
               //[0, 0, 0, 0]
               System.out.println(Arrays.toString(arrC[i]));
               for(int j=0;j< arrC[i].length;j++){
                   arrC[i][j]=(int)(Math.random()*88);//0-88随机数
               }
               //[38, 83, 53, 50]
               System.out.println(Arrays.toString(arrC[i]));
           }
           //[[42, 62, 57, 17], [29, 65, 54, 10], [67, 71, 61, 18], [44, 17, 22, 46], [38, 83, 53, 50]]
            System.out.println(Arrays.deepToString(arrC));
    
    5.数组越界问题
     /*数组下标越界:*/
    
            arr=new int[4];
            System.out.println(Arrays.toString(arr));
            arr[1]=32;
            arr[3]=32;
           // arr[4]=32;//运行时报错:ArrayIndexOutOfBoundsException下标越界

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值