1、運(yùn)算符演示
注意:1、整數(shù)的除法運(yùn)算,不會(huì)產(chǎn)生小數(shù)
2、如果要讓運(yùn)算結(jié)果是小數(shù),那么參與運(yùn)算的數(shù)據(jù)至少一個(gè)是浮點(diǎn)型的
(和直接將結(jié)果轉(zhuǎn)成浮點(diǎn)型的比較)
3、+ 作為連接符使用時(shí),和字符串相連任何數(shù)據(jù)都變成字符串
4、為了提高程序的易讀性,強(qiáng)制使用()提高優(yōu)先級(jí)
++
--
num++;先使用再自增
++num;先自增再使用
在原數(shù)字上進(jìn)行增1或減1操作
class Opt00
{
public static void main(String[] args){
int num1 = 10;
int num2 = 4;
//-----------------------------------
int result1 = num1 + num2;
System.out.println(result1);
int result2 = num1 - num2;
System.out.println(result2);
int result3 = num1 * num2;
System.out.println(result3);
int result4 = num1 / num2;//只是取商,即2
System.out.println(result4);
int result5 = num1 % num2;//只是取余,即余數(shù)2
System.out.println(result5);
//如何使商是精確地小數(shù)2.5?------------------------------
double result6 = (double)(num1 / num2);//結(jié)果是2.0 實(shí)際它只是將num1/num2的商2強(qiáng)轉(zhuǎn)成浮點(diǎn)型2.0
System.out.println(result6);
double result7 = (double)num1 / num2;//正確,即將num1轉(zhuǎn)成double型的再與int型的num2相除結(jié)果默認(rèn)double型的
System.out.println(result7);
//用小括號(hào)提升運(yùn)算優(yōu)先級(jí)
int result8 = (4 + 6) / 3;
System.out.println(result8);
// + 法 ---- 還可以作為連接符
System.out.println("10 + 4 = " + result1);
//注意:若num1、num2對(duì)應(yīng)的值換成其他值了這時(shí)打印結(jié)果10+4=是不變的但result1的值變了。如將num2改成5后就是10+4=15
//解決:
System.out.println(num1 + " + " + num2 + " = " + result1);//這樣輸出結(jié)果就會(huì)隨num2、num1的變化而變化
System.out.println("-------------------------------------------");
System.out.println(num1 + " + " + num2 + " = " + num1 + num2);//錯(cuò)誤(10+4=104); 在這里+作為連接符只是將字符串連接起來(lái)而已
System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));//正確(10+4=14);小括號(hào)提升了優(yōu)先級(jí)先運(yùn)算num1+num2的值再進(jìn)行連接
System.out.println(num1 + " * " + num2 + " = " + num1 * num2);//這時(shí)不需要用小括號(hào),因?yàn)?優(yōu)先級(jí)大于+的優(yōu)先級(jí)先運(yùn)算*再連接
//System.out.println(num1 + " - " + num2 + " = " + num1 - num2);//報(bào)錯(cuò)
System.out.println(num1 + num2 + " = " + num1 + " + " + num2);//14=10+4 注意:讀取時(shí)從左向右,先做加法運(yùn)算再向右讀時(shí)發(fā)現(xiàn)字符串則從此往后的所有數(shù)據(jù)都是字符串
System.out.println(num1 - num2 + " = " + num1 + " - " + num2);//6=10-4
System.out.println("----------------------------------------");
int num3 = 1;
//num3++;
++num3;//++放在前面或后面此時(shí)的結(jié)果都一樣
System.out.println("num3 = " + num3);
int num4 = 1;
System.out.println("num4 = " + num4++);//1(++在后面先使用在自增,即先使用num4=1打印出1在自增變?yōu)閚um4=2)
System.out.println("num4 = " + num4);//2(在上一條語(yǔ)句中num4=2所以輸出2)
System.out.println("num4 = " + ++num4);//3 (先自增再使用,即上一條語(yǔ)句num4=2自增后為3所以打印出3)
}
}
2、賦值運(yùn)算符
從右向左運(yùn)行
num1 += num2;即num1 = num1 + num2; -= *= /= 同理
注意:當(dāng)參與運(yùn)算的數(shù)據(jù)類型 <= int時(shí),會(huì)默認(rèn)向下強(qiáng)轉(zhuǎn)
class Opt01
{
public static void main(String[] args){
int num1 = 1;
int num2 = 2;
//int sum = num1 + num2;
//num1 = num1 + num2;
num1 += num2;// num1 = num1 + num2;
num1 *= num2;// num1 = num1 * num2;
System.out.println("num1 = " + num1);
System.out.println("----------------------------");
short s1 = 1;
//s1 = s1 + 1;//報(bào)錯(cuò)
s1 += 1;//合法,此時(shí)系統(tǒng)默認(rèn)向下強(qiáng)轉(zhuǎn) 即s1 = (short)(s1 + 1);
System.out.println("s1 = " + s1);
}
}
3、比較運(yùn)算符
class Opt02
{
public static void main(String[] args){
int num1 = 10;
int num2 = 5;
boolean b = num1 == num2;
System.out.println(num1 + " == " + num2 + "?" + b);
System.out.println(num1 + " != " + num2 + "?" + (num1 != num2));
System.out.println(num1 + " > " + num2 + "?" + (num1 > num2));
System.out.println(num1 + " < " + num2 + "?" + (num1 < num2));
System.out.println(num1 + " >= " + num2 + "?" + (num1 >= num2));
System.out.println(num1 + " <= " + num2 + "?" + (num1 <= num2));
}
}
4、邏輯運(yùn)算符
參與運(yùn)算與產(chǎn)生的結(jié)果都是boolean型的
& 與---->一個(gè)為false 結(jié)果就是false
| 或---->一個(gè)為true 結(jié)果就是true
! 非---->取反
^ 亦或---->同真為假,同假為真,一真一假為真
&& ----> 使用結(jié)果與 & 無(wú)區(qū)別 ---->底層實(shí)現(xiàn)細(xì)節(jié)不同
|| ----> 使用結(jié)果與 | 無(wú)區(qū)別
& ----->1、判斷時(shí),如果有多個(gè)表達(dá)式,那么每個(gè)都進(jìn)行運(yùn)算
2、與運(yùn)算只要有一個(gè)false,就為false
問(wèn)題:
當(dāng)有一個(gè)為false時(shí),結(jié)果就是false,其余表達(dá)式?jīng)]必要運(yùn)算。用&效率低
解決:
使用 &&
&& ----> 又稱為短路與 ----> 使用&& 有一個(gè)false,就直接返回結(jié)果 效率高
|| ----> 又稱為短路或 ----> 使用|| 有一個(gè)true,就直接返回結(jié)果 效率高
建議以后使用 && ||
class Opt03
{
public static void main(String[] args){
boolean b1 = true;
boolean b2 = true;
boolean b3 = false;
boolean b4 = false;
//boolean b1 = true, b2 = true, b3 = false, b4 = false;//合法,但可讀性低,不建議這樣寫(xiě)
boolean result1 = b1 & b2;
System.out.println(b1 + " & " + b2 + " = " + result1);
System.out.println(b1 + " & " + b3 + " = " + (b1 & b3));
System.out.println(b3 + " & " + b4 + " = " + (b3 & b4));
System.out.println(b1 + " | " + b2 + " = " + (b1 | b2));
System.out.println(b1 + " | " + b3 + " = " + (b1 | b3));
System.out.println(b3 + " | " + b4 + " = " + (b3 | b4));
System.out.println("!true = " + !true);
System.out.println("!false = " + !false);
System.out.println("---------------------------------");
System.out.println(b1 + " ^ " + b2 + " = " + (b1 ^ b2));
System.out.println(b1 + " ^ " + b3 + " = " + (b1 ^ b3));
System.out.println(b3 + " ^ " + b4 + " = " + (b3 ^ b4));
int b5 = 1;
int b6 = 1;
int b7 = 2;
int b8 = 3;
boolean result2 = b5 == b7 & b7 == b8;//&的兩邊都會(huì)進(jìn)行運(yùn)算
System.out.println(result2);
// false & false
boolean result3 = b5 == b7 && ++b5 == b6;//(使用&&運(yùn)算符時(shí)左邊b5==b7是錯(cuò)誤的這時(shí)就不再向右運(yùn)算直接得出false)
System.out.println("b5 = " + b5);//b5 = 1而不是b5=2,因?yàn)?amp;&前面的已經(jīng)得出false不再向右進(jìn)行
boolean result4 = b5 == b7 & ++b5 == b6;//&的左右兩邊都要運(yùn)算,即使左邊已是false此時(shí)可以得出答案還是會(huì)把右邊運(yùn)算完
System.out.println("b5 = " + b5);//b5 = 2 因?yàn)橛疫叺倪€會(huì)繼續(xù)運(yùn)算
}
}
5、位運(yùn)算符
分析:
傳統(tǒng)運(yùn)算,在計(jì)算機(jī)底層實(shí)現(xiàn),運(yùn)算量比較大
所以出現(xiàn)了位運(yùn)算符
2 * 2 ----> bit左移一位即可
3 * 10 ---> 30
3 * 100 --> 300
1 * 2 ----> 10
1 * 4 ----> 100
1 * 8 ----> 1000
右移:>> 無(wú)符號(hào)右移:>>>
無(wú)符號(hào)右移的作用:
1、如果是正數(shù)和右移沒(méi)什么區(qū)別
如果是負(fù)數(shù)變整數(shù)
2、效率考慮 ---- 正數(shù)情況下,無(wú)符號(hào)右移效率高
3、使用時(shí),整數(shù)的右移盡量使用無(wú)符號(hào)右移
4、負(fù)數(shù)一般不用無(wú)符號(hào)右移
0為false 1為true
位運(yùn)算符:
1、位運(yùn)算符運(yùn)算的是二進(jìn)制位
2、0 f 1 t
3、類似于邏輯運(yùn)算
一個(gè)數(shù)字連續(xù)^同一個(gè)數(shù)字兩次,返回仍然是自身
class Opt04
{
public static void main(String[] args){
//左移:左移n位,就是 *2^n
//左移就是追加n個(gè)0,前面的舍棄
int num = 3;
int result = num << 3;
System.out.println("result = " + result);//3 * 8 = 24
//問(wèn)題:
int num1 = 3;
int result2 = num << 31;
System.out.println("result2 = " + result2);// -2147483648
//右移:右移n位,就是 /2^n
//1、最右邊的n位舍棄
//2、前面根據(jù)標(biāo)志位補(bǔ),如果是0 補(bǔ)0 是1 補(bǔ)1
int num2 = 16;
int result3 = num2 >> 2;
System.out.println("result3 = " + result3);// 4
//無(wú)符號(hào)右移,統(tǒng)統(tǒng)補(bǔ)0
int num3 = -16;
int result4 = num3 >>> 2;//預(yù)期 -4
System.out.println("result4 = " + result4);// 1073741820
System.out.println("---------------------------");
int num4 = 8;
int num5 = 9;
int result5 = num4 & num5;
System.out.println("result5 = " + result5);
System.out.println("result6 = " + (num4 | num5));
System.out.println("result7 = " + (num4 ^ num5));
System.out.println("result7 = " + ~num4);
//^的使用
System.out.println(num4 ^ num5 ^ num5);
System.out.println(122 ^ 7 ^ 7);
System.out.println(120 ^ 9 ^ 9);
System.out.println(12 ^ 110 ^ 110);
}
}
6、注意:
1、使用()提升優(yōu)先級(jí)
2、char類型可以參與運(yùn)算
class Opt05
{
public static void main(String[] args){
//數(shù)據(jù)類型 result = 布爾表達(dá)式 ? 結(jié)果1 : 結(jié)果2;
//結(jié)果1是布爾表達(dá)式為true時(shí)返回,結(jié)果2是false時(shí)返回
int num1 = 1;
int num2 = 2;
char result = num1 > num2 ? '是' :'否';
System.out.println("result = " + result);
System.out.println("------------------------------");
char c1 = 'A';
int result2 = c1 + 1;
System.out.println("result2 = " + result2);
}
}
7、鍵盤(pán)錄入
import java.util.Scanner;
class Opt06
{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入數(shù)據(jù)");
int num = scanner.nextInt();//程序掛起,等待鍵盤(pán)輸入---注意輸入的類型
//
System.out.println("您輸入的數(shù)字 = " + num);
System.out.println("請(qǐng)輸入文本");
String text = scanner.next();
System.out.println("您輸入的文本 = " + text);
}
}
8、條件語(yǔ)句
選擇執(zhí)行的if:
格式1:if(條件表達(dá)式)
執(zhí)行代碼
注意:1、以后代碼格式:
if(條件表達(dá)式){
執(zhí)行代碼
}
2、if(條件表達(dá)式)
執(zhí)行代碼
執(zhí)行代碼格式:
A、單條語(yǔ)句 ----- 容易造成代碼誤讀
B、塊語(yǔ)句 ------- {} ---提高程序的易讀性和易維護(hù)性
C、帶標(biāo)簽的塊語(yǔ)句
編碼規(guī)范:
1、只跟塊語(yǔ)句
2、如果非要跟單條語(yǔ)句
格式:if(條件表達(dá)式)code;
import java.util.Scanner;
class FlowPath00
{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)數(shù)字:");
int num = scanner.nextInt();
if(num > 0){
System.out.println(num + "是正數(shù)");
}
if(num == 0){
System.out.println(num + "是0");
}
if(num < 0){
System.out.println(num + "是負(fù)數(shù)");
}
}
}
1、當(dāng)if判斷時(shí),結(jié)果不是true就是false
2、如果使用兩次if,判斷兩次,資源浪費(fèi)
3、使用 if else
格式:
if(條件表達(dá)式){
code;
} else {
code;
}
class FlowPath01
{
public static void main(String[] args){
int num1 = 1;
int num2 = 2;
/*if(num1 - num2 > 0){
System.out.println("num1比num2大");
}
if(num1 - num2 <= 0){
System.out.println("num1不比num2大");
}*/
if(num1 - num2 > 0){
System.out.println("num1比num2大");
} else {
System.out.println("num1不比num2大");
}
}
}
格式三:
if(條件表達(dá)式){
code
}else if(條件表達(dá)式){
code
}else if(條件表達(dá)式){
code
}else if(條件表達(dá)式){
code
}else {
code
}
注意:只要有一個(gè)符合條件,其余都不執(zhí)行
判斷一個(gè)數(shù)字是正數(shù)負(fù)數(shù)還是0
import java.util.Scanner;
class FlowPath02
{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)數(shù)字");
int num = scanner.nextInt();
/*if (num < 0){
System.out.println(num + "是負(fù)數(shù)");
}else if(num == 0){
System.out.println(num + "是0");
}else {
System.out.println(num + "是正數(shù)");
}*/
if (num < 0){
System.out.println(num + "是負(fù)數(shù)");
}else if(num == 0){
System.out.println(num + "是0");
}else if(num < -10){
System.out.println("num小于-10");//輸入-100運(yùn)行結(jié)果是-100是負(fù)數(shù)而當(dāng)前這條語(yǔ)句不執(zhí)行(前面有符合條件的其余的都不執(zhí)行)
}else {
System.out.println(num + "是正數(shù)");
}
}
}
class FlowPath03
{
public static void main(String[] args){
int num1 = 1;
int num2 = 2;
int result = num1 > num2 ? num1 : num2;
System.out.println("result = " + result);
//定義一個(gè)接收的數(shù)據(jù)
int max;
if(num1 > num2){
max = num1;
}else{
max = num2;
}
System.out.println("max = " + max);
//--------------------------------------------
if(num1 > num2){
System.out.println("max = " + num1);
}else{
System.out.println("max = " + num2);
}
}
}
判斷一個(gè)數(shù)據(jù)是否屬于一個(gè)區(qū)間,常規(guī)的數(shù)學(xué)格式 60 <= score < 70 非法
正確格式:score >= 60 && score < 70
import java.util.Scanner;
class FlowPath04
{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)成績(jī):");
int score = scanner.nextInt();
if(score >= 0 && score < 60){
System.out.println("不及格");
} else if(score >= 60 && score < 70){
System.out.println("及格");
}else if(score >= 70 && score < 80){
System.out.println("一般");
}else if(score >= 80 && score < 90){
System.out.println("良好");
}else if(score >= 90 && score <=100){
System.out.println("優(yōu)秀");
}else {
System.out.println("非法數(shù)據(jù)");
}
}
}
switch(數(shù)據(jù)){
case 常量1:
code
break;
case 常量2:
code
break;
.......
default:
code
break;
}
注意事項(xiàng):
1、使用的數(shù)據(jù)類型:byte short int char -------(int型)
enum(枚舉) string ------字符串
2、case后必須是常量
3、規(guī)范:break必須加,除非極特殊情況
4、default可以用也可以不用
5、default位置無(wú)所謂 ----都是最后執(zhí)行
6、default如果在最后,可以不使用break
import java.util.Scanner;
class FlowPath05
{
public static void main(String[] args){
/*String str1 = "ABC";
String str2 = "DEF";
String str = "ABC";
switch(str){
case str1: -----------非法的
System.out.println("ABC");
break;
case str2:
System.out.println("DEF");
break;
}*/
/*String str = "ABC";
switch(str){
case "ABC":
System.out.println("ABC");
break;
case "DEF":
System.out.println("DEF");
break;
}*/
/*long l = 1L;
switch((int)1){
case 1:
System.out.println("A");
break;
case 2:
System.out.println("B");
break;
}*/
Scanner scanner = new Scanner(System.in);
int level = scanner.nextInt();
switch(level){
case 1:
System.out.println("初級(jí)");
break;
case 2:
System.out.println("中級(jí)");
break;
case 3:
System.out.println("高級(jí)");
break;
default:
System.out.println("非法數(shù)據(jù)");
break;
}
char c = 'A';
switch(c){
case 'A':
System.out.println("A");
break;
case 'B':
System.out.println("B");
break;
}
}
}
需求:根據(jù)輸入的月份查找季節(jié)
switch case 和if else 比較:
1、if else ------更常用
2、if else 適應(yīng)性更廣 ---- 區(qū)間判斷,if else 更適合
3、switch case 效率更高
移動(dòng)端開(kāi)發(fā),比如游戲:選擇少,效率要求高使用switch case
import java.util.Scanner;
class FlowPath06
{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt();
if(month >= 3 && month <= 5){
System.out.println("春季");
} else if(month >= 6 && month <= 8){
System.out.println("夏季");
} else if(month >= 9 && month <= 11){
System.out.println("秋季");
} else if(month >= 1 && month <= 2 || month ==12){
System.out.println("冬季");
} else {
System.out.println("非法數(shù)據(jù)");
}
/*switch(month){
case 1:
System.out.println("冬季");
break;
case 2:
System.out.println("冬季");
break;
case 3:
System.out.println("春季");
break;
case 4:
System.out.println("春季");
break;
case 5:
System.out.println("春季");
break;
case 6:
System.out.println("夏季");
break;
case 7:
System.out.println("夏季");
break;
case 8:
System.out.println("夏季");
break;
case 9:
System.out.println("秋季");
break;
case 10:
System.out.println("秋季");
break;
case 11:
System.out.println("秋季");
break;
case 12:
System.out.println("冬季");
break;
default:
System.out.println("非法數(shù)據(jù)");
break; // -----方式一
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
default:
System.out.println("非法數(shù)據(jù)");
break;// ------方式二
}*/
}
}
練習(xí)
class Test00
{
public static void test01(){
System.out.println('a');//a
System.out.println('a'+1);//98 --- 字符參與運(yùn)算,自動(dòng)轉(zhuǎn)型 --->字符本質(zhì)就是數(shù)字
System.out.println("hello"+'a'+1);//helloa1 --->字符串與任意數(shù)據(jù)相連都變成字符串
System.out.println('a'+1+"hello");//98hello --->同優(yōu)先級(jí),從左到右
System.out.println("5+5="+5+5);//5+5=55
System.out.println(5+5+"=5+5");//10=5+5
}
public static void main(String[] args){
test01();
}
}
class Test01
{
public static void main(String[] args){
int num1 = 10;
int num2 = 20;
//1、三元運(yùn)算符
int max = num1 > num2 ? num1 : num2;
System.out.println("max = " + max);
//2、if else
int max2;
if(num1 > num2){
max2 = num1;
} else {
max2 = num2;
}
System.out.println("max2 = "+max2);
//---------------三個(gè)數(shù)字比較------------------------
int num3 = 10;
int num4 = 100;
int num5 = 50;
//1、三元運(yùn)算符
//獲取前兩個(gè)數(shù)中的大的
int max3 = num3 > num4 ? num3 : num4;
//和第三個(gè)比較
int max4 = max3 > num5 ? max3 : num5;
System.out.println("max4 = " + max4);
//方法二:
int max5 = num3 > num4 ? (num3 > num5 ? num3 : num5) : (num4 > num5 ? num4 : num5);
System.out.println("max5 = " + max5);
//----------比較兩個(gè)數(shù)是否相等---------------------------
int num6 = 10;
int num7 = 20;
boolean isEquals = num6 == num7;
System.out.println("isEquals = " + isEquals);
}
}
獲取兩個(gè)整數(shù)中的最大值
輸入的數(shù)據(jù):兩個(gè)數(shù) --- 參數(shù)
輸出的數(shù)據(jù):最大值
獲取三個(gè)整數(shù)中的最大值
比較兩個(gè)整數(shù)是否相同
輸入的數(shù)據(jù):兩個(gè)數(shù) ---參數(shù)
返回的數(shù)據(jù):返回true 或false --- boolean
class Test02
{
public static int max(int num1,int num2){
//int result = num1 > num2 ? num1 : num2;
//return result;
//方式二:
return num1 > num2 ? num1 : num2;
}
public static boolean isEquals(int num1, int num2){
//boolean isEquals = num1 == num2;
//return isEquals;
//方式二:
return num1 == num2;
}
public static void main(String[] args){
int max = max(3,4);
System.out.println("max = " + max);
boolean isEquals = isEquals(4,4);
System.out.println("isEquals = " + isEquals);
}
}
鍵盤(pán)錄入兩個(gè)數(shù)據(jù),并對(duì)這兩個(gè)數(shù)據(jù)求和,輸出其結(jié)果
import java.util.Scanner;
class Test03
{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入第一個(gè)數(shù)字:");
int num1 = scanner.nextInt();
System.out.println("請(qǐng)輸入第二個(gè)數(shù)字");
int num2 = scanner.nextInt();
int sum = num1 + num2;
System.out.println(num1 + " + " + num2 + " = " + sum);
}
}