java基础--笔记3


逻辑运算     运算符两侧为boolean类型,运算的结果也必须是boolean类型的值

&     逻辑与,单与运算
        当运算两侧都为true时,结果为true,否则为false。

|      逻辑或,单或运算
        当两侧都为false时结果为false,否则为true。

^      逻辑异或
         当两侧相同时(同为true或者同为false),结果为false,否则结果为true。

&&     双与运算
          当运算两侧都为true时,结果为true,否则为false。
          双与和单与的区别: 双与运算当左侧为false时,右侧的表达式不参与运算。

||     双或
        当两侧都为false时结果为false,否则为true。
        对于双或而言,当左侧为true时,右侧不参与运算。

!     非运算
          非true为false   非false为true


位运算          指得是二进制数位运算

&     按位与运算
          运算规律:当相同的二进制数位上都为1时,与的结果就为1,否则为0.

|     按位或运算
          运算规律:当相同的二进制数位上都为0时结果为0,否则为1.

^     按位异或运算
          运算规律:当相同的二进制数位上数据相同时,结果为0,否则为1.
          应用:对同一个数异或两次,得到是原来的数。可以用于加密。          

练习:交换两个数
     使用第三方变量
     不使用第三方变量交换两个空间中的值,可以使用加减法完成。但是,当数据过大时,会发生数据溢出。
     溢出解决方案: 使用按位异或运算代替。

class Test1
{
     public static void main(String[] args)
     {
          int a = 4;
          int b = 5;
          a = a^b;
          b = a^b;
          a = a^b;
          System.out.println("a="+a+",b="+b);
     }
}


取反  ~

<<     左移符号     高位移出的舍弃,低位用0补。
          当对一个整数向左移动N位时,相当于给原数乘以2的N次方(注意N为N%32的值,N=33相当于移动N的1次方)数据过大时,此规律不适用。

>>     右移符号     
          带符号右移,最高位补的数取决于原有数据最高位是什么。不带符号的右移,则不管最高位是什么都补0.
          当对一个整数向右移动N位时,相当于给原数除以2的N次方(注意N为N%32的值,N=33相当于移动N的1次方)数据过大时,此规律不适用。

>>>     无符号右移

练习:     
     需求:     给定的整数60,获取其十六进制数位的表现形式
     思路:     1,十六进制它是怎么来的
                         按照每四个二进制数位为一组,把它转成一个十六进制数位。
                    2,怎么取出二进制数中的四个二进制位上的数。要取出4位。原二进制数与上1111,取出最低的那4个二进制位上的数据。
                    3,上述方式只能取出最低的那4个二进制数位上的数据,接下来怎么取出其他?   可以使用无符号右移,对原来的数据向右移动4位,在进行第二步。
     步骤:     1,需要一个变量存放这个整数,
                    2,对这个数据进行&运算,
                    3,打印这个数
                    4,对原数无符号右移4位
                    5,对移动后的新值再进行&运算
                    6,打印这个值

class Test2
{
     public static void main(String[] args)
     {     // 步骤:     1,需要一个变量存放这个整数,
          int x=60;
          // 2,对这个数据进行&运算
          int temp = x & 0b1111;
          // 3,打印这个数
          System.out.println( (char)(temp-10+'A'));  
          // 4,对原数无符号右移4位
          x = x>>>4;
          //  5,对移动后的新值再进行&运算
          temp = x & 0b1111;
          // 6,打印这个值
          System.out.println(temp);
     }
}



三元运算符(三目运算)

一元运算:运算符一侧有数据
二元运算:算术运算 逻辑运算  关系运算

格式:  (表达式1)?表达式2 : 表达式3;
                 例: max=a<b ? b : a ;
运算原则:     1) 表达式一的运算结果必须为boolean类型的值
                     2) 当表达式一的结果为true时,表达式2的运算结果就为整个三元运算符的结果。
                     3)当表达式1的结果为flase时,表达式3的运算结果就为整个三元运算符的结果。
class Noname1
{
     public static void main(String[] args)
     {
          int a=4;
          int b=5;
          int max;
          max=a<b?b:a;
          System.out.println("max="+max);
     }
}



判断结构(if

第一种格式:      if(条件表达式)
                         {
                              判断正确后执行语句;
                         }
格式说明:if关键字后面是一对小括号,小括号后面是没有分号的,小括号中的表达式运算完的结果必须是boolean类型的值。


第二种格式:     if()
                         {
                              判断正确后执行语句;
                         }
                         else
                         {
                              判断不成立后执行的语句;
                         }

三元运算可以称为if-else简化形式。但有前提,如果if-else执行后有具体的结果,就可以使用三元运算代替它。否则无法代替。

练习:
          需求:对给定的1~7的一个数,输出其对应的星期。
          思路:
                    1,需要判断当前这个数据具体是几。可以使用if判断结果来实现。
                    2,判断成立后,需要输出对应的星期
          步骤:
                    1,需要定义变量,存储当前这个数据。
                    2,判断当前这个数据具体是几

class Test3
{
     public static void main(String[] args)
     {
          //  1,需要定义变量,存储当前这个数据。
          int x = 8;
          //  2,判断当前这个数据具体是几
          if(x<1 || x>7)
          System.out.println("ERROR");
          else if(x == 1)
          System.out.println("星期一");
          else if(x == 2)
          System.out.println("星期二");
          else if(x == 3)
          System.out.println("星期三");
          else if(x == 4)
          System.out.println("星期四");
          else if(x == 5)
          System.out.println("星期五");
          else if(x == 6)
          System.out.println("星期六");
          else if(x == 7)
          System.out.println("星期日");
     }
}

判断结构的第三种情况
if(判断的条件表达式)
{

}
else if()
{

}
else if()
{

}
。。。。。

作业:
          需求:根据指定的月份,输出对应的季节。
                    春季 3 4 5
                    夏季 6 7 8
                    秋季 9 10 11
                    冬季 12 1 2


class Test4
{
     public static void main(String[] args)
     {
          int month = 13;
          if(month >= 3 && month <= 5)
          System.out.println("春季");
          if(month >= 6 && month <= 8)
          System.out.println("夏季");
          if(month >= 9 && month <= 11)
          System.out.println("秋季");
          if(month == 12 || month == 1 || month == 2)
          System.out.println("冬季");
          else
          System.out.println("火星的季节");
     }
}



switch(多分枝结构)

     格式:
          switch(表达式)    计算的结果只能为byte short int char
          {
               case     取值1:
                              执行语句;
                              break;
               case     取值2:
                              执行语句;
                              break;
                    。。。。
               default :
                              执行语句;
                              break;
          }                    

switch的执行流程:
       jvm会先计算switch表达式的值,使用这个值和case后面的值做对比。当某一个case身后的值和表达式的值匹配,就会执行当前这个case身后的语句。若,case身后的语句没有break,此时会继续往下执行,直到switch语句结束。

default 和 case 是程序的入口。先找case入口。
default:
     System.out.println("E");
case 2:
     System.out.println("B");
     break;
编译结果为 E B ,因为default语句没有break语句,jvm从入口进去后,没有遇到break,会继续运行,直到遇到break。


if结构和switch结构的区别
     1,表达式的结果类型不同
          if(判断的条件表达式  boolean类型值)
          switch(具体数据类型  byte short int char 枚举 String)
     2,功能上的差异
          if 能判断区间
          switch只能是具体值

switch练习:
          需求:相对成绩进行划分
               90--100  A
               80--89    B
               70--79    C
               60--69    D
               60以下   E     
          思路:
                    1,使用switch结构,switch只能判断确切的值
                         怎么把区间变成确切值?
                    2,发现区间是有规律:
                         90 - 99    可以使用9代替
                         。。。。

class Test5
{
     public static void main(String[] args)
     {
          int x = 99;
          if(x <= 100 || x >= 0)
          {
               switch(x/10)
               {
                    case 10 :
                    case 9 :
                         System.out.println("A");
                         break;
                    case 8 :
                         System.out.println("B");
                         break;
                    case 7 :
                         System.out.println("C");
                         break;
                    case 6 :
                         System.out.println("D");
                         break;
                    default :
                         System.out.println("E");
               }
          }
          else
               System.out.println("ERROR");
     }
}



循环结构

while语句
     格式:     while(循环的条件表达式)
                    {
                         执行语句;
                    }


练习:
     需求:求出1-100之间能被3和7整除的所有数的和值
     思路:1,怎么提供1-100的这些数据
                    想这样有规律的数据,可以使用循环提供出来。
               2,使用循环将数据提供出来之后,需要对提供出来的这些数据进行判断。   怎么判断? 使用if判断,判断条件怎么写?
num % 3 == 0 && num % 7 == 0
               3,判断结束否,如果数据符合条件,需要求和,怎么求和。           需要定义一个变量存储每次求和,需要将每次符合条件的数据都加到这个变量中。
      步骤:
               1,定义变量,通过循环控制其变化
               2,写循环提供数据
               3,对数据进行判断
               4,求和
               5,i更新
               6,打印

class  Test6
{
     public static void main(String[] args)
     {
          //  1,定义变量,通过循环控制其变化
          int x = 1 ;
          int sum = 0 ;
          // 2,写循环提供数据
          while(x <= 100)
               {
                    // 3,对数据进行判断
                    if (x % 3 == 0 && x % 7 == 0)
                    {
                         //  4,求和
                         sum = sum + x ;
                    }
                    //  5,x更新
                    x++ ;
               }

              
               //  6,打印
          System.out.println(sum);
     }
    
}


作业:
需求:求1~100之间是6的倍数的个数和和值
思路:1,怎么得到1-100这件的数,采用循环可以得到。
          2,判断出6的倍数的数x%6=0,并统计。
          3,数据符合条件,再求和
步骤:1,定义变量,通过循环控制其变化
          2,写循环控制数据
          3,对数据进行判断
          4,符合条件,计数
          5,求和
          6,变量更新
          7,打印

class Test7
{
     public static void main(String[] args)
     {
          // 1,定义变量,通过循环控制其变化
          int x = 1  ;
          int g = 0 ;
          int sum = 0;
          // 2,写循环控制数据
          while(x <= 100)
               {
                    // 3,对数据进行判断
                    if(x % 6 == 0)
                         {
                              //   4,符合条件,计数
                              g++;
                              //    5,求和
                              sum = sum + x ;
                         }
                    //  6,变量更新
                    x++ ;
               }
          //  7,打印
          System.out.println("符合条件个数="+g);
          System.out.println("sum="+sum);
     }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值