1.“&”和“&&”的异同 2.程序输出 class OperatorTest { public static void main(String[] args) { boolean x = true; boolean y = false; short z = 40; if ((z++ == 40) && (y = true)) { z++; } if ((x = false) || (++z == 43)) { z++; } System.out.println("z = " + z); } } 结果为: 44
3.定义三个int型变量并赋值,使用三元运算符或者if-else获取这三个数中的较大数的实现
int num1 = 10, num2 = 21, num3 = -21;
if(num1 >= num1 && num1 >= num3){
max = num1;
}else if(num2 >= num1 && num2 >= num3){
max = num2;
}else{
max = num3;
}
System.out.println("三个数中的最大值为:" + max)
4.编写程序,声明2个double型变量并赋值。判断第一个数大于10.0,且第2个数小于20.0,打印两数之和。否则,打印两数的乘积。
double d1 = 12.3;
double d2 = 32.1;
if(d1 > 10 && d2 < 20){
}else{
}
5. 交换两个变量值的代码的实现
String s1 = "南京";
String s2 = "北京";
String temp = s1;
s1 = s2;
s2 = temp;
1.算术运算符: + - + - * / % (前)++ (后)++ (前)-- (后)-- + 【典型代码】 //除号:/ int num1 = 12; int num2 = 5; int result1 = num1 / num2; System.out.println(result1);//2 // %:取余运算 //结果的符号与被模数的符号相同 //开发中,经常使用%来判断能否被除尽的情况。 int m1 = 12; int n1 = 5; System.out.println("m1 % n1 = " + m1 % n1); int m2 = -12; int n2 = 5; System.out.println("m2 % n2 = " + m2 % n2); int m3 = 12; int n3 = -5; System.out.println("m3 % n3 = " + m3 % n3); int m4 = -12; int n4 = -5; System.out.println("m4 % n4 = " + m4 % n4); //(前)++ :先自增1,后运算 //(后)++ :先运算,后自增1 int a1 = 10; int b1 = ++a1; System.out.println("a1 = " + a1 + ",b1 = " + b1); int a2 = 10; int b2 = a2++; System.out.println("a2 = " + a2 + ",b2 = " + b2); int a3 = 10; ++a3;//a3++; int b3 = a3; //(前)-- :先自减1,后运算 //(后)-- :先运算,后自减1 int a4 = 10; int b4 = a4--;//int b4 = --a4; System.out.println("a4 = " + a4 + ",b4 = " + b4); 【特别说明的】 1.//(前)++ :先自增1,后运算 //(后)++ :先运算,后自增1 2.//(前)-- :先自减1,后运算 //(后)-- :先运算,后自减1 3.连接符:+:只能使用在String与其他数据类型变量之间使用。
2.赋值运算符:= += -= *= /= %= 【典型代码】 int i2,j2; //连续赋值 i2 = j2 = 10; //*************** int i3 = 10,j3 = 20; int num1 = 10; num1 += 2;//num1 = num1 + 2; System.out.println(num1);//12 int num2 = 12; num2 %= 5;//num2 = num2 % 5; System.out.println(num2); short s1 = 10; //s1 = s1 + 2;//编译失败 s1 += 2;//结论:不会改变变量本身的数据类型 System.out.println(s1); 【特别说明的】 1.运算的结果不会改变变量本身的数据类型 2. //开发中,如果希望变量实现+2的操作,有几种方法?(前提:int num = 10;) //方式一:num = num + 2; //方式二:num += 2; (推荐) //开发中,如果希望变量实现+1的操作,有几种方法?(前提:int num = 10;) //方式一:num = num + 1; //方式二:num += 1; //方式三:num++; (推荐)
3.比较运算符(关系运算符): == != > < >= <= instanceof 【典型代码】 int i = 10; int j = 20; System.out.println(i == j);//false System.out.println(i = j);//20 boolean b1 = true; boolean b2 = false; System.out.println(b2 == b1);//false System.out.println(b2 = b1);//true 【特别说明的】 1.比较运算符的结果是boolean类型 2.> < >= <= :只能使用在数值类型的数据之间。 3. == 和 !=: 不仅可以使用在数值类型数据之间,还可以使用在其他引用类型变量之间。 Account acct1 = new Account(1000); Account acct2 = new Account(1000); boolean b1 = (acct1 == acct2);//比较两个Account是否是同一个账户。 boolean b2 = (acct1 != acct2);//
4.逻辑运算符:& && | || ! ^ 【典型代码】 //区分& 与 && //相同点1:& 与 && 的运算结果相同 //相同点2:当符号左边是true时,二者都会执行符号右边的运算 //不同点:当符号左边是false时,&继续执行符号右边的运算。&&不再执行符号右边的运算。 //开发中,推荐使用&& boolean b1 = true; b1 = false; int num1 = 10; if(b1 & (num1++ > 0)){ System.out.println("我现在在北京"); }else{ System.out.println("我现在在南京"); } System.out.println("num1 = " + num1); boolean b2 = true; b2 = false; int num2 = 10; if(b2 && (num2++ > 0)){ System.out.println("我现在在北京"); }else{ System.out.println("我现在在南京"); } System.out.println("num2 = " + num2); // 区分:| 与 || //相同点1:| 与 || 的运算结果相同 //相同点2:当符号左边是false时,二者都会执行符号右边的运算 //不同点3:当符号左边是true时,|继续执行符号右边的运算,而||不再执行符号右边的运算 //开发中,推荐使用|| boolean b3 = false; b3 = true; int num3 = 10; if(b3 | (num3++ > 0)){ System.out.println("我现在在北京"); }else{ System.out.println("我现在在南京"); } System.out.println("num3 = " + num3); boolean b4 = false; b4 = true; int num4 = 10; if(b4 || (num4++ > 0)){ System.out.println("我现在在北京"); }else{ System.out.println("我现在在南京"); } System.out.println("num4 = " + num4); 【特别说明的】 1.逻辑运算符操作的都是boolean类型的变量。而且结果也是boolean类型
5.位运算符:<< >> >>> & | ^ ~ 【典型代码】 int i = 21; i = -21; System.out.println("i << 2 :" + (i << 2)); System.out.println("i << 3 :" + (i << 3)); System.out.println("i << 27 :" + (i << 27)); int m = 12; int n = 5; System.out.println("m & n :" + (m & n)); System.out.println("m | n :" + (m | n)); System.out.println("m ^ n :" + (m ^ n)); 【面试题】 你能否写出最高效的2 * 8的实现方式? 答案:2 << 3 或 8 << 1 【特别说明的】 1. 位运算符操作的都是整型的数据 2. << :在一定范围内,每向左移1位,相当于 * 2 >> :在一定范围内,每向右移1位,相当于 / 2 典型题目: 1.交换两个变量的值。 2.实现60的二进制到十六进制的转换
6.三元运算符:(条件表达式)? 表达式1 : 表达式2 【典型代码】 1.获取两个整数的较大值 2.获取三个数的最大值 【特别说明的】 1. 说明 ① 条件表达式的结果为boolean类型 ② 根据条件表达式真或假,决定执行表达式1,还是表达式2. 如果表达式为true,则执行表达式1。 如果表达式为false,则执行表达式2。 ③ 表达式1 和表达式2要求是一致的。 ④ 三元运算符可以嵌套使用 2. 凡是可以使用三元运算符的地方,都可以改写为if-else 反之,不成立。 3. 如果程序既可以使用三元运算符,又可以使用if-else结构,那么优先选择三元运算符。原因:简洁、执行效率高。
流程控制 顺序结构:程序从上到下执行。 分支结构: if-else if - else switch-case 循环结构: for while do-while
章节练习题及面试题 简答题 标识符的命名规则需要注意哪几点? 基本数据类型有哪几类?包含String吗? 写出基本数据类型自动转化的流程图 整型默认的是什么类型,浮点型(实数型)默认的是什么类型? 对于包名,类名接口名,变量名和函数名,常量名我们习惯如何格式来命名? 定义一个变量需要注意什么? 强制类型转化可能出现的问题 char型变量中能不能存贮一个中文汉字?为什么? 答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节, 所以放一个中文是没问题的 定义float f=3.4;是否正确? 答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4 String是最基本的数据类型吗 答:基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String是java中定义的一个类,类都属于引用数据类型。 根据运算符的功能,我们把运算符分成哪几类? Java有没有goto 答:java中的保留字,现在没有在java中使用 用最有效的的方法算出2称以8等于几 答案:2<<3 char型变量中是否可以存储一个汉字? 能,因为Java一个字符是2个字节,每一个字符使用Unicode编码表示 float f=3.4;是否正确,表达式15/2*2的值是多少 答案:不正确,float f = 3.4F; 答案:14 Java的基本数据类型有哪些?String是基本数据类型吗? 基本数据类型有:byte,short,int,long,float,double,char,boolean String是引用数据类型,不是基本数据类型 以下代码的运行结果 public static void main(String[] args) { char x = 'x'; int i = 10; System.out.println(true? x : i); System.out.println(true? 'x' : 10); } 答案: 120 x /* * 如果其中有一个是变量,按照自动类型转换规则处理成一致的类型; * 如果都是常量,如果一个是char,如果另一个是[0~65535]之间的整数按char处理; * 如果一个是char,另一个是其他,按照自动类型转换规则处理成一致的类型; */ 以下代码的执行结果 public static void main(String[] args) { int a = 8, b = 3; System.out.println(a>>>b); System.out.println(a>>>b | 2); } 答案: 1 3 编程题 为抵抗洪水,战士连续作战89小时,编程计算共多少天零多少小时? //为抵抗洪水,战士连续作战89小时,编程计算共多少天零多少小时? public class TestExer1 { public static void main(String[] args) { int hour = 89; int day = hour / 24; hour = hour % 24; System.out.println("为抵抗洪水,战士连续作战" + day + "天" + hour + "小时"); } } 今天是周二,100天以后是周几? //今天是周二,100天以后是周几? public class TestExer2 { public static void main(String[] args) { int week = 2; week += 100; week = week % 7; System.out.println("100天后星期" + week); } } 算术运算符的使用 class SuanShu{ public static void main(String[] args){ int a = 23; int b = 12; System.out.println(a + "+" + b + "=" + (a+b)); int sum = a + b; System.out.println(a + "+" + b + "=" + sum); int sub = a - b; //System.out.println(a + "-" + b + "=" + a-b);//错误,原因是a + "-" + b + "=" + a的结果是字符串,字符串不能进行减法 System.out.println(a + "-" + b + "=" + (a-b)); System.out.println(a + "-" + b + "=" + sub); int mul = a * b; System.out.println(a + "*" + b + "=" + a*b); System.out.println(a + "*" + b + "=" + mul); //整数相除,只保留整数部分 int div = a / b; System.out.println(a + "/" + b + "=" + a/b); System.out.println(a + "/" + b + "=" + div); double d = (double)a/b;//先把a的类型进行转换,转换成double类型,然后再和b相除 System.out.println(a + "/" + b + "=" + d); int yu = a % b; System.out.println(a + "%" + b + "=" + yu); System.out.println("------------------特殊的取模----------------------"); System.out.println(5%2);//1 System.out.println(-5%-2);//-1 System.out.println(-5%2);//-1 System.out.println(5%-2);//1 System.out.println("------------------负号----------------------"); int num1 = 12; int num2 = -num1; System.out.println("num2=" + num2); System.out.println("------------------自增----------------------"); int i = 0; System.out.println("自增之前i=" + i); i++; System.out.println("自增第一次之后i=" + i); ++i; System.out.println("自增第二次之后i=" + i); int j = ++i;//把i自增1,然后结果赋值给j,或者说,先算++i,然后再赋值 System.out.println("自增第三次之后i=" + i); System.out.println("j="+j); int k = i++;//先算赋值,把i的值赋值给k,i原来是3,把3赋值给k,然后i在自增1,i变成4 System.out.println("自增第四次之后i=" + i); System.out.println("k="+k); //面试题:陷阱题 i = i++;//先赋值,把i原来的值重新赋值给i,不变,然后i自增,但是这个自增后的值没有在放回变量i的位置 System.out.println("自增第五次之后i=" + i); } } 考查运算符的优先级 写出输出的结果. class Demo{ public static void main(String[] args){ int x=0,y=1; if(++x==y-- & x++==1||--y==0) System.out.println("x="+x+",y="+y); //x = 2,y = 0; else System.out.println("y="+y+",x="+x); } } 编写代码实现两个变量值交换,int m = 3, n =5; 答案一: int temp = m; m = n; n = temp; 答案二: m = m + n; n = m - n; m = m - n; 答案三: m = m ^ n; n = m ^ n; m = m ^ n; 如何求一个0~255范围内的整数的十六进制值,例如60的十六进制表示形式3C //方式一:自动实现 String str1 = Integer.toBinaryString(60); String str2 = Integer.toHexString(60); //方式二:手动实现 int i1 = 60; int i2 = i1&15; String j = (i2 > 9)? (char)(i2-10 + 'A')+"" : i2+""; int temp = i1 >>> 4; i2 = temp & 15; String k = (i2 > 9)? (char)(i2-10 + 'A')+"" : i2+""; System.out.println(k+""+j); 小明要到美国旅游,可是那里的温度是以华氏度为单位记录的。它需要一个程序将华氏温度(80度)转换为摄氏度,并以华氏度和摄氏度为单位分别显示该温度。 //小明要到美国旅游,可是那里的温度是以华氏度为单位记录的。 //它需要一个程序将华氏温度(80度)转换为摄氏度,并以华氏度和摄氏度为单位分别显示该温度。 public static void main(String[] args) { int h = 80; double s = (h - 32) / 1.8; System.out.println(h + "华氏度,是摄氏度" + Math.round(s)); } 练习前++,后++,三元运算符 写出输出结果: class Demo{ public static void main(String[] args){ int a=3,b=8; int c=(a>b)?a++:b++; System.out.println("a="+a+"\tb="+b+"\tc="+c); // int d=(a>b)?++a:++b; System.out.println("a="+a+"\tb="+b+"\td="+d); // int e=(a<b)?a++:b++; System.out.println("a="+a+"\tb="+b+"\te="+e); // int f=(a<b)?++a:++b; System.out.println("a="+a+"\tb="+b+"\tf="+f); // } } 比较 + 与 += short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错 答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型) short s1 = 1; s1 += 1;(可以正确编译)