黑马程序员技术交流社区

标题: 传智java基础班第三天笔记 [打印本页]

作者: csdwz    时间: 2013-11-20 21:00
标题: 传智java基础班第三天笔记
逻辑运算     运算符两侧为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,打印这个值



三元运算符(三目运算)

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

格式:  (表达式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关键字后面是一对小括号,小括号后面是没有分号的,小括号中的表达式运算完的结果必须是boollean类型的值。


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

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

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



判断结构的第三种情况:
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 是程序的入口。
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代替
                         。。。。



循环结构

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



作者: csdwz    时间: 2013-11-20 21:01
加油,持续更新中。。。。。。。。。
作者: 、_墨迹    时间: 2013-11-20 22:52
爪机也来顶一个。
作者: 、_墨迹    时间: 2013-11-20 22:52
很不错的笔记。
作者: 侠客梦的懒猫    时间: 2013-11-20 23:15
加油!{:soso_e130:}
作者: csdwz    时间: 2013-11-21 21:06
侠客梦的懒猫 发表于 2013-11-20 23:15
加油!

大家都需要加油哈。。
作者: csdwz    时间: 2013-11-21 21:07
、_墨迹 发表于 2013-11-20 22:52
很不错的笔记。

嘿嘿。。。里面还有好多代码没有弄上去,文件太大了
作者: csdwz    时间: 2013-11-21 21:07
、_墨迹 发表于 2013-11-20 22:52
爪机也来顶一个。

顶顶更健康




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2