Java基础第三天
1.1赋值运算符
符号: =
(1)当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
(2)支持连续赋值。
扩展赋值运算符: +=, -=, *=, /=, %=
思考1: short s = 3;
s=s+2; ①
s+=2; ②
①和②有什么区别?
扩展赋值运算符不改变数据类型
思考2:
boolean b1 = false;
//区分好==和=的区别。
if(b1=true)
System.out.println("结果为真");
else
System.out.println("结果为假");
思考3:
int i = 1;
i *= 0.1;
System.out.println(i);//
i++;
System.out.println(i);//
案例:
//赋值运算符:= += -= *= /= %=
class GetValue { public static void main(String[] args) { //int i2 = 10; //i2 += 3; //i2 -= 3; //i2 *= 3; //i2 /= 3; //i2 %= 3; //System.out.println(i2); /*boolean b1 = false; if(b1==true){ System.out.println("结果为真"); }else{ System.out.println("结果为假"); } int i = 1; i *= 0.1; System.out.println(i); i++; System.out.println(i); int i1 = 10; i1 += 3; short s = 10; s= (short)(s+1); int i2 = 12; i2 %= 5; System.out.println(i1); System.out.println(s); System.out.println(i2); */ boolean b1 = false; if(b1==true){ System.out.println("结果为真"); }else{ System.out.println("结果为假"); } }}
1.2比较运算符
比较运算符的结果都是boolean型,也就是要么是true,要么是false。
比较运算符“==”不能误写成“=” 。
1.3逻辑运算符
&—逻辑与 | —逻辑或 !—逻辑非
&& —短路与 || —短路或 ^ —逻辑异或
逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
理解:异或,追求的是“异”!
案例:
//逻辑运算符: & && | || ! ^class TestLogic { public static void main(String[] args) { /*int x = 1; int y = 1; if(x++==2&++y==2){ x=7; } System.out.println("x="+x+",y="+y);//x=2,y=2 int x = 1,y = 1; if(x++==2&&++y==2){ x = 7; } System.out.println("x="+x+",y="+y);//x=2,y=1 int x = 1,y = 1; if(x++==1|++y==1){ x = 7; } System.out.println("x="+x+",y="+y);//x=7,y=2 int x = 1,y = 1; if(x++==1||++y==1){ x = 7; } System.out.println("x="+x+",y="+y);//x=7,y=1 boolean a = true; boolean b = false; System.out.println(a & b); System.out.println(a && b); System.out.println(a | b); System.out.println(a || b); System.out.println(a & !b); System.out.println(a ^ b); boolean b = false; //& 与 && 的区别:&:不管左边是true还是false,右端都会进行运算。 // &&:当左端为false时,右端不再进行运算 //以后使用时,建议使用 && int i1 = 10; if(b & (i1++) > 0){ System.out.println("今天天气很晴朗"); }else{ System.out.println("难得没有雾霾"); } System.out.println(i1); int i2 = 10; if(b && (i2++) > 0){ System.out.println("今天天气很晴朗"); }else{ System.out.println("难得没有雾霾"); } System.out.println(i2); */ //| 与 || 的区别:|:当左端为true时,右端照样做运算。 // ||:当左端为true时,右端不再进行运算。 //我们在使用时,选择:|| boolean a = true; int i3 = 10; if(a | i3++ > 0){ System.out.println("今天天气很晴朗"); }else{ System.out.println("难得没有雾霾"); } System.out.println(i3);//11 int i4 = 10; if(a || i4++ > 0){ System.out.println("今天天气很晴朗"); }else{ System.out.println("难得没有雾霾"); } System.out.println(i4);//10 }}
1.4位运算符
位运算符:<< >> >>> | & ~ ^
class TestBit{ public static void main(String[] args) { int i1 = 31; System.out.println(i1<<3);//248 System.out.println(i1<<28); System.out.println(i1>>2);//7 System.out.println(i1>>>2);//7 int i2 = -31; System.out.println(i2>>2);//-8 System.out.println(i2>>>2);//1073741816 System.out.println(12 & 5);//4 System.out.println(12 | 5);//13 System.out.println(12 ^ 5);//9 System.out.println(~12);//-13 }}
class TestExer1{ public static void main(String[] args) { int m = 12; int n = 5; System.out.println("m:"+m+"n:"+n); //方法一:提供一个临时变量。 int temp = m; m = n; n = temp; System.out.println("m:"+m+"n:"+n); //方法二:当m和n较大时,有可能出现精度损失 m = m + n; n = m - n; m = m - n; System.out.println("m:"+m+"n:"+n); //方法三:优点:没有上面两种方法的缺点。缺点:难! m = m ^ n; n = m ^ n; m = m ^ n; System.out.println("m:"+m+"n:"+n); }}
1.5三元运算符
表达式1和表达式2为同种类型
三元运算符与if-else的联系与区别:
1)三元运算符可简化if-else语句
2)三元运算符要求必须返回一个结果。
3)if后的代码块可有多个语句
练习: 获取两个数中的较大数
获取三个数中的较大数
三元运算符:(条件表达式)? 表达式1 : 表达式2;
要求:表达式1与表达式2为同种数据类型。
既然是运算符,就一定会有运算的结果,结果的数据类型与表达式1,2的类型一致。
三元运算符在一定程度上可以与if-else互换。(三元运算符一定可以转换为if-else,反之不成立。)
class TestSanYuan{ public static void main(String[] args) { int i = 30; int j = 20; String max = (i>j) ? "i大":(i == j)?"i等于j":"j大"; System.out.println("max="+max); if(i>j){ System.out.println("i大,i="+i); }else if(i==j){ System.out.println("i=j,i,j="+j); }else{ System.out.println("j大,j="+j); } int m = 20; int n = 10; int k = 39; int max1 = (m > n) ? m : n; int result = (max1 > k) ? max1 : k; System.out.println(result); }}
2.0程序流程控制
循环结构
程序从上到下逐行的执行,中间没有任何判断和跳转。
分支结构
根据条件,选择性地执行某段代码。
有if...else和switch两种分zhi语句。
循环结构
根据循环条件,重复性的执行某段代码。
有while、do...while、for三种循环语句。
注:JDK1.5提供了foreach循环。方便的遍历集合、数组元素。
2.1怎么获取键盘输入:
//1.导包
import java.util.Scanner;
class TestScanner{
public static void main(String[] args){
//2.创建一个Scanner类的对象
Scanner s = new Scanner(System.in);
System.out.println("请输入一个字符串:");
//3.调用此对象的相应的方法,完成键盘输入的值的获取
//next():表示从键盘获取一个字符串
String str = s.next();
System.out.println(str);
}
}
案例:
从键盘输入小明的期末成绩。
当成绩为100分时,奖励一辆BMW;
当成绩为(80,99]时,奖励一个台iphone5s;
当成绩为[60,80]时,奖励一本参考书;
其它时,什么奖励也没有。
import java.util.Scanner;class TestIf1{ public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("请输入成绩"); int score = s.nextInt();//? if(score > 100 || score < 0){ System.out.println("您输入的成绩有误"); }else{ if(score == 100){ System.out.println("奖励一辆BMW"); }else if(score > 80 && score <= 99){ System.out.println("奖励一台iPhone5s"); }else if(score >=60 && score <= 80){ System.out.println("奖励一本书"); }else{ System.out.println("什么奖励也没有"); } } }}
编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
import java.util.Scanner;class TestIf2 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("请输入第一个整数"); int num1 = s.nextInt(); System.out.println("请输入第二个整数"); int num2 = s.nextInt(); System.out.println("请输入第三个整数"); int num3 = s.nextInt(); if(num1 > num2){ if(num1 > num3){ if(num2 > num3){ System.out.println(num3+","+num2+","+num1); }else{ System.out.println(num2+","+num3+","+num1); } }else{ System.out.println(num2+","+num1+","+num3); } }else{ if(num3 < num1){ System.out.println(num3+","+num1+","+num2); }else{ if(num3 > num2){ System.out.println(num1+","+num2+","+num3); }else{ System.out.println(num1+","+num3+","+num2); } } } }}