day02-语言基础(2)

来源:互联网 发布:淘宝吉他艾吉特哪家好 编辑:程序博客网 时间:2024/05/22 13:29

JAVASE 语言基础(2)

2.5.3比较运算符

 
注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。 
注2:比较运算符“==”不能误写成“=” 。 
————————————————————————————————————————————————————

2.5.4逻辑运算符

 
逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。 
“&”和“&&”的区别: 
&时,左边无论真假,右边都进行运算; 
&&时,如果左边为真,右边参与运算;如果左边为假,那么右边不参与运算。有短路效果。 
“|”和“||”的区别: 
|时,左边无论真假,右边都进行运算; 
||时,如果左边为真,右边不参与运算(有短路效果);如果左边为假,右边参与运算。 
异或( ^ )与或( | )的不同之处是: 
当左右都为true时, 结果为false。

——————————————————————————————————————————————————

2.5.5位运算符

  • 位运算是直接对二进制进行运算。

 
————————————————————————————————————————————————————


 
———————————————————————————————————————————————————————— 
-左移:

  1. System.out.println(3<<2); //左移2位 3*2(2)=12

 
总结:左移几位就是乘上2几次方,空位用0补 
————————————————————————————————————————————————————————

  • 右移: 
    右移原理和左移相似 
    总结:右移几位就是除上2的几次幂运算,空位是什么就用什么补。
  1. System.out.println(6>>1);//右移1位

————————————————————————————————————————————————————————

  • 负数右移: 
    正数和负数在Java中是以补码的形式存在的: 
    正数的补码:正数的补码与其原码相同。 
    负数的补码:就是对正数的原码进行:最高位为1(符号位),其余各位取反,最后在加1所得。
  1. System.out.println(-6>>1);//右移1位

 
————————————————————————————————————————————————————

  1. 逻辑运算符和位运算符例子:
  2. “|“ or (或)
  3. “||” or (或)有短路效果
  4. “&” and (与)
  5. “&&” and (与)有短路效果
  6. 异或 ^
  7. 相同为0,不同为1
  8. 相同为false,不同为true
  9. 当异或两侧是整形常量时,是用其对应的二进制书按位进行异或的
  10. ~ 反码 按位取反
  11. public class OperateDemo {
  12. public static void main(String[] args)
  13. {
  14. int x=3;
  15. /*
  16. ||或运算符特点:
  17. 左边为真时,右边不参与运算。有短路效果
  18. 左边为假时,右边参与运算。
  19. */
  20. System.out.println(x>6||x<5);// false|| true->true
  21. /*
  22. &&与运算符特点:
  23. 左边为真时,右边参与运算。
  24. 左边为假时,右边参与运算。有短路效果
  25. */
  26. System.out.println(x>2&&x<5);//true&&true -->true
  27. System.out.println((x>2)^(x<5));//true^true --false
  28. System.out.println((x<2)^(x>5));//false^false --false
  29. /*
  30. 异或在位运算的使用
  31. 2:二进制:0 0 1 0
  32. 5:二进制:0 1 0 1
  33. ------------------
  34. 0 1 1 1---》十进制的7
  35. */
  36. System.out.println(2^3);//7
  37. /*
  38. ~ 反码
  39. 下面例子中反码
  40. 1111-1111 1111-1111 1111-1111 1111-1001
  41. 是一个负数(符号位是1)计算机存储负数时用补码来存储的,第一位是符号位,负数的补码是取反加1
  42. 6:二进制 0000-0000 0000-0000 0000-0000 0000-0110
  43. 反码 1111-1111 1111-1111 1111-1111 1111-1001
  44. 1000-0000 0000-0000 0000-0000 0000-0110
  45. + 1
  46. ---------------------------------------------
  47. 1000-0000 0000-0000 0000-0000 0000-0111 是-7 符号加2 有效位111
  48. */
  49. System.out.println(~6);
  50. System.out.println(-7);//与(~6)相等
  51. }
  52. }

——————————————————————————————————————————————————————

题1:最有效率的方式算出2乘以8等于几? 
答: 2<<3; 
题2:两个整形变量互换数值,在不用第三个变量的情况下。

  1. int a=2,b=5;
  2. int m=8,n=3;
  3. /*
  4. 不建议使用,当两个变量的数值很大时,会出现超过表数范围,而int型会强制自动转换,造成数据精度丢失。
  5. */
  6. a=a+b; //a=2+5=7
  7. b=a-b; //b=(2+5)-5=2
  8. a=a-b; //a=(2+5)-2=5
  9. /*
  10. 异或运算中,当一个数同两次结果还是这本身如 a^b^b=a a^b^b=aa^b^b=a a^b^b=a 。
  11. a1=a1^b1 :1000^0011 ->0100
  12. b1=a1^b1 :0100^0011 ->1000
  13. a1=a1^b1 :0100^1000 ->0011
  14. */
  15. a1=a1^b1;
  16. b1=a1^b1;//(a1^b1)^b1=a1
  17. a1=a1^b1;
  18. System.out.println("方法一:a="+a+",b="+b);
  19. System.out.println("方法二:a1="+a1+",b="+b);

—————————————————————————————————————————————————————

2.5.6三元运算符

  • 格式: (条件表达式)?表达式1:表达式2 
    条件表达式为true时,取表达式1的值, 
    条件表达式为true时,取表达式1的值。
  • 示例; 
    取两数的最大值?
  1. int x=3,y=5,z;
  2. z = (x>y)?x:y //变量存储的就是两个数的大数。

—————————————————————————————————————————————————————

2.6程序流程控制

  • 判断
  • 选择
  • 循环

2.6.1判断结构

if语句 
三种格式: 

  • if语句特点: 
    a,每一种格式都是单条语句。 
    b,第二种格式与三元运算符的区别:三元运算符运算 
    完要有值出现。好处是:可以写在其他表达式中。 
    c,条件表达式无论写成什么样子,只看最终的结构是 
    否是true 或者 false;

2.6.2选择结构

格式: 
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,那么程序会继续向下 
    5.执行,运行可以执行的语句,直到遇到break或者switch结尾结束。

2.6.3循环结构

代表语句:while do while for

while语句格式: 
while(条件表达式) 

执行语句(循环体); 

}


do while语句格式; 
do 

执行语句 

}while(条件表达式);

do while特点是条件无论是否满足, 
循环体至少被执行一次。


for语句格式: 
for(初始化表达式;循环条件表达式;循环后的操作表达式) 

执行语句; 

}

注意: 
a,for里面的连个表达式运行的顺序,初始化表达式只读一次,判断循环条件, 为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件, 重复找个过程,直到条件不满足为止。 
b,while与for可以互换,区别在于for为了循环而定义的变量在for循环结束就是 在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。 
c,最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循 
环多少次,而是根据某些条件,来控制循环。


2.6.4其他流程控制流语句

break( 跳出), continue( 继续)

break语句:应用范围:选择结构和循环结构。 
continue语句:应用于循环结构。

注意: 

1.这两个语句离开应用范围,存在是没有意义的。 

2.这个两个语句单独存在下面都不可以有语句,因为执行不到。 

3.continue语句是结束本次循环继续下次循环。 

4,标号的出现,可以让这两个语句作用于指定的范围。


练习:

1.练习:获取1到10 10个数字的和。

  1. /*
  2. 练习:
  3. 获取1到10 10个数字的和。
  4. 推算:
  5. 第一次 1+2
  6. 第二次 3+3
  7. 第三次 6+4
  8. 第四次 10+5
  9. 思路:
  10. 每次都是和加上数值
  11. 数值一直是递增的
  12. 步骤:
  13. 1.定一个类。
  14. 2.写主函数。
  15. 3.定义一个变量存储1到10.
  16. 4.定一个变量存储1到10的和
  17. 5.使用while循环求和
  18. */
  19. //累加思想
  20. public class WhileTest{
  21. public static void main(String[] args){
  22. int x=1;
  23. int sum=0;
  24. while(x<=10){
  25. sum+=x;
  26. x++;
  27. }
  28. System.out.println(sum);
  29. }
  30. }

2.练习:1~100之间 6的倍数出现的次数。

  1. /*
  2. 练习:
  3. 1~100之间 6的倍数出现的次数。
  4. 要求:自己独立完成思想的书写。和步骤的文字描述。
  5. 思想:
  6. 1.先从一个数开始,给我一个数如何知道是6的倍数,尝试用已经知道6的倍数进行研究,找到(规律)共性。
  7. 比如6/6=1 12/6=2 18/6=3 貌似只是能除尽, 试试7/6=1余数1 试试取模
  8. 6%6=0 12%6=0 找到规律。6的倍数对6取模为0;
  9. 2.1到100需要一个个取出来对6取模,数值在变化,不确定。
  10. 3.如果找到6的倍数,需要记住次数,次数也变化,不确定。
  11. 4分析整个过程,主要是
  12. 取数据--》取模--》判断是6的倍数?--》是--》记数增加--》取数据
  13. --》否--》取数据
  14. 步骤重复,考虑使用循环。
  15. 步骤:
  16. 1.定义一个变量,存储1到100中的数据,
  17. 2.定义一个变量,存储出现的次数。
  18. 3.定义一个变量,存储数据对6取得的模。
  19. 3.使用while循环,循环100次,取得1到100的数据,
  20. 3.1 取得数据对6取模
  21. 3.2判断模是否等于0
  22. 3.3等于
  23. 出现次数加一次
  24. 3.4不等于
  25. 数据自增
  26. */
  27. // 计数器思想
  28. public class WhileTest2{
  29. public static void main(String[] args){
  30. int i=1; //控制循环次数
  31. int num=1; //数据1到100
  32. int count=0; //6的倍数出现次数
  33. int mo=0; //模
  34. while(i<=100){
  35. mo=num%6;
  36. if(mo==0){
  37. count++;
  38. System.out.println("第"+count+"个6的倍数是:"+num);
  39. }
  40. num=num+1; //控制数据自增规律
  41. i++;
  42. }
  43. System.out.println("count="+count);
  44. }
  45. }