Java语言基础(二)
Java语言基础
比较运算符和逻辑运算符
※&& 和&的区别:首个判别式为假,则后边的判别式不进行判断,结果为false。
※|| 和|的区别:首个判别式为真,则后边的判别式不进行判断,结果为true。
一个数异或同一个数两次,结果还是这个数。
class OperateDemo3 { public static void main(String[] args) { /* 比较运算符,运算结果必须为true或false */ //System.out.println(3>2);//true //System.out.println(3==2);//false /* 逻辑运算符的作用: 用于连接两个boolean类型的表达式 & 与 运算特点: true&true=true; true&false=false; false&ture=false; false&false=false; | 或 运算特点: true|true=true; true|false=true; false|true=true; false|false=false; ^ 异或 运算特点: true^true=false; true^false=true; false^true=true; false^false=false; ! 非运算:判断事物的另一面 !true=false; !false=true; && 和&的区别:首个判别式为假,则后边的判别式不进行判断,结果为false || 和|的区别:首个判别式为真,则后边的判别式不进行判断,结果为true */ int x=3; System.out.println(x>2&x<5);//true System.out.println(x<2|x>5);//false } }
位运算符
用于二进制位运算的符号
class OperateDemo4 { public static void main(String[] args) { //System.out.println(6&3); //System.out.println(6|3); //System.out.println(~6);//取反操作,一般不用,结果为7 System.out.println(3<<2);//3左移2位,3*2^2 System.out.println(3>>1);//3右移1位,3/(2^1) } }
>>>:无符号右移:数据进行右移时,高位出现的空位,无论原先最高位是什么,空位都用0补 ;
高效的运算首选对二进制位进行操作;
class OperateText { public static void main(String[] args) { //最有效率的方式算出2诚意8等于几 //System.out.println(2<<3); int a=3,b=5; System.out.println("a="+a+",b="+b); /* //对两个整数变量的值进行互换(不需要第三方变量) //这种方式不要用,如果两个整数的数值过大,会超出int范围,会强制转换,数据会变化 a=a+b; //a=8 b=a-b; //b=8-5=3 a=a-b; //b=8-3=5 */ int a=3,b=5; a=a^b; //a=3^5 b=a^b; //b=(3^5)^5=3 a=a^b; //a=(3^5)^3=5 System.out.println("a="+a+",b="+b); } }
在开发时,使用第三方变量实现值的交换,因为阅读性强
三元运算符
格式
(条件表达式)?表达式1:表达式2
如果条件为true,运算后的结果是表达式1;如果条件为false,运算后的结果是表达式2
class OperateDemo5 { public static void main(String[] args) { int x=3,y; y=(x>1)?100:200; System.out.println("y="+y); //获取两个整数中的较大值 int a=3,b=5; int max=a>b?a:b; System.out.println("max="+max); } }
程序流程控制
顺序结构,判断结构,选择结构,循环结构(同C++)
三元运算符就是if else语句的简写格式,但存在其局限性。
简写格式什么时候用? 当if else运算后有一个具体的结果时,可以简化成三元运算符。
局部代码块可以定义局部变量的生命周期,局部变量在该代码块结束时消亡。
switch(x)中,x的取值可以有四种类型:byte,short,int,char。
if和switch的应用
if:
1.对具体的值进行判断
2.对区间判断
3.对运算结果是boolean类型的表达式进行判断
switch:
1.对具体的值进行判断
2.值的个数通常是固定的
对于几个固定的值判断,建议使用switch语句。因为switch语句会将具体的答案都加载进内存,效率相对高。
do while 特点:无论条件是否满足,循环体至少执行一次
当对一个条件进行一次判断时,可以使用if语句,
当对一个条件进行多次判断时,可以使用while语句
注意:
在使用循环时,一定要明确哪些语句需要参与循环,哪些不需要
循环通常情况下,需要定义条件,需要控制次数
for语句
class ForDemo { public static void main(String[] args) { int x=1; for(System.out.println("a");x<3;System.out.println("0")) //条件是表达式即可,不一定是for(int i=0;i<=10;i++)这种形式;如果需要不同表达式,则用逗号隔开 { System.out.println("d"); x++; } } }
for和while的特点:
1.for和while可以互换
2.格式上的不同,在使用上有点区别
如果需要通过变量来对循环进行控制,该变量值作为循环增量存在时,区别就可以体现出来
class ForTest { public static void main(String[] args) { //打印1~10十个数字 int x=1; while(x<11) //while结束后,x还驻留在内存中 { System.out.println("x="+x); x++; } for (int y=1;y<=10 ;y++ ) //for循环结束,y消亡 { System.out.println("y="+y); } } }
嵌套循环练习
class ForForTest { public static void main(String[] args) { /* 输出如下图形 ***** **** *** ** * */ for(int x=1;x<=5;x++) { for(int y=5-x;y>=0;y--) //使用x控制y的值 { System.out.print("*"); } System.out.println(); //每次行的输出结束后,换行 } System.out.println("--------------"); /* * ** *** **** ***** */ for (int x=1;x<=5 ;x++ ) { for (int y=1;y<=x ;y++ ) //使用x控制y的范围 { System.out.print("*"); } System.out.println(); //每次行的输出结束后,换行 } System.out.println("--------------"); /* 54321 5432 543 54 5 */ for (int x=1;x<=5 ;x++ ) { for (int y=5;y>=x ;y--) { System.out.print(y); } System.out.println(); } System.out.println("--------------"); /* 1 22 333 4444 55555 */ for (int x=1;x<=5 ;x++ ) { for (int y=1;y<=x ; y++) { System.out.print(x); } System.out.println(); } } }
class ForFor99 { public static void main(String[] args) { /* 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 …… */ for (int x=1;x<=9 ;x++ ) { for (int y=1; y<=x;y++ ) { System.out.print(y+"*"+x+"="+y*x+"\t");//使用制表符'\t'能够实现输出时对齐 } System.out.println(); } /* \n 回车 \t 制表符 \b 退格 \r 按下回车键 windows系统中回车符其实是由两个符号组成的\r\n linux中回车符是\n */ } }
class BreakContinueDemo { public static void main(String[] args) { /* break 跳出 作用的范围:只在switch语句和循环语句中使用 ※当break语句单独存在时,下面不要定义其他语句,因为执行到break语句时跳出,后面的语句不会执行 break跳出当前循环,如果出现了循环嵌套,break想要跳出指定的循环,可以通过标号来完成 */ for (int x=0;x<3 ;x++ ) { System.out.println("x="+x); break; //第一次循环的最后跳出,只输出一次x=0 } System.out.println("---------------"); loop1:for (int x=0;x<3 ;x++ ) //对for循环起名 { loop2:for (int y=0;y<4 ;y++ ) { System.out.println("x="+x); break loop1; //在内循环中第一次执行输出语句后,直接跳出外循环loop1,结果只输出一次x=0 } } System.out.println("---------------"); /* continue 继续 作用的范围:循环结构 作用:结束本次循环,继续下次循环 */ for (int x=0;x<11 ;x++ ) { /* 在进入循环后,先执行continue语句,跳出当前循环进行下次循环 continue; System.out.println("x="+x); //该语句无法执行,编译报错。 */ if (x%2==0) //x为偶数时,不输出,继续下次循环 { continue; } System.out.println("x="+x); } System.out.println("---------------"); loop1:for (int x=0;x<3 ;x++ ) //对for循环起名 { loop2:for (int y=0;y<4 ;y++ ) { System.out.println("x="+x); continue loop1; //在内循环中第一次执行输出语句后,跳到外循环继续执行,输出x=0,x=1,x=2 } } } }