ITLearnNote—-聚焦網際網路的技術革新
3.1 邏輯運算子的基本用法
A:邏輯運算子有哪些
邏輯與&,邏輯或|,邏輯異或^,邏輯非!
短路與&&,短路或||
B:案例演示
class Demo1_Operator {
public static void main(String[] args) {
//&,|,^,!
//int x = 10;
//5 < x < 15
//x > 5 & x < 15
//邏輯與 & 並且and 遇false則false
int a = 10;
int b = 20;
int c = 30;
/*System.out.println(a < b & b < c);//true & true = true
System.out.println(a < b & b > c);//true & false = false
System.out.println(a > b & b < c);//false & true = false
System.out.println(a > b & b > c);//false & false = false//邏輯或 或or 遇true則true
System.out.println(a < b | b < c);//true | true = true
System.out.println(a < b | b > c); //true | false = true
System.out.println(a > b | b < c); //false | true = true
System.out.println(a > b | b > c); //false | flase = false
//邏輯異或 ^ 兩邊相同為false,兩邊不同為true
/*System.out.println(a < b ^ b < c);//true | true = false
System.out.println(a < b ^ b > c); //true | false = true
System.out.println(a > b ^ b < c); //false | true = true
System.out.println(a > b ^ b > c); //false | flase = false*/
//邏輯非!
System.out.println(!true);
System.out.println(!!true);
}
}
注意事項:
a:邏輯運算子一般用於連線boolean型別的表示式或者值。
b:表示式:就是用運算子把常量或者變數連線起來的符合java語法的式子。
算術表示式:a + b
比較表示式:a == b(條件表示式)
C:結論
&邏輯與:有false則false。
|邏輯或:有true則true。
^邏輯異或:相同為false,不同為true。
!邏輯非:非false則true,非true則false。
特點:偶數個不改變本身。
3.2 邏輯運算子&&和&的區別
&&和&的區別?
a:最終結果一樣。
b:&&具有短路效果。左邊是false,右邊不執行。
&是無論左邊是false還是true,右邊都會執行
||與|的區別
a:最終的結果是一樣
b:||具有短路效果,左邊為true,右邊不執行
3.3 位運算子的基本用法1
&:有0則0
|:有1則1
^:相同則0,不同則1
~:按位取反
System.out.println(6 & 3); //2
System.out.println(6 | 3); //7
System.out.println(6 ^ 3); //5
System.out.println(~6); //-7
3.4 位異或運算子的特點
位異或運算子的特點
^的特點:一個數據對另一個數據位異或兩次,該數本身不變。
class Demo2_Operator {
public static void main(String[] args) {
//System.out.println(5 ^ 10 ^ 10);
//System.out.println(5 ^ 10 ^ 5);
/*
* 請自己實現兩個整數變數的交換(不需要定義第三方變數)
* 注意:以後講課的過程中,我沒有明確指定資料的型別,預設int型別。
*/
int x = 10;
int y = 5;
//需要第三方變數,開發推薦用這種
/*int temp;
temp = x;
x = y;
y = temp;*/
//不需要定義第三方變數,有弊端,有可能會超出int的取值範圍
/*x = x + y; //10 + 5 = 15
y = x - y; //15 - 5 = 10
x = x - y; //15 - 10 = 5*/
//不需要第三方變數,通過^來做
x = x ^ y; // 10 ^ 5
y = x ^ y; // 10 ^ 5 ^ 5 y = 10
x = x ^ y; // 10 ^ 5 ^ 10 x = 5
System.out.println("x = " + x + ",y = " + y);
}
}
3.5 位運算的基本用法2及面試題
A:案例演示 >>,>>>,<<的用法:
<<:左移 左邊最高位丟棄,右邊補齊0
>>:右移 最高位是0,左邊補齊0;最高為是1,左邊補齊1
>>>:無符號右移 無論最高位是0還是1,左邊補齊0
最有效率的算出2 * 8的結果
class Demo3_Operator {
public static void main(String[] args) {
//左移,向左移動幾位就是乘以2的幾次冪
//System.out.println(12 << 1); //24
//System.out.println(12 << 2); //48
/*
00000000 00000000 00000000 00001100 12的補碼
(0)0000000 00000000 00000000 000011000 24的補碼
(00)000000 00000000 00000000 0000110000 48的補碼
*/
//右移,向右移動幾位就是除以2的幾次冪
//System.out.println(12 >> 1);
//System.out.println(12 >> 2);
/*
00000000 00000000 00000000 00001100 12的補碼
000000000 00000000 00000000 0000110(0) 6
0000000000 00000000 00000000 000011(00) 3
*/
//最有效率的算出2 * 8的結果
System.out.println(2 << 3);
}
}
3.6 三元運算子的基本用法
三元運算子的格式:(關係表示式) ? 表示式1 : 表示式2;
class Demo1_Operator {
public static void main(String[] args) {
//(關係表示式) ? 表示式1 : 表示式2;
int x = 10;
int y = 5;
int z;
z = (x > y) ? x : y;
System.out.println("z = " + z);
}
}
3.7 三元運算子的練習
class Test1_Operator {
public static void main(String[] args) {
/*
* A:案例演示
* 比較兩個整數是否相同
* B:案例演示
* 獲取三個整數中的最大值
*/
//比較兩個整數是否相同
/*int x = 10;
int y = 10;
//boolean b = (x == y) ? true : false;
boolean b = (x == y);
System.out.println("b = " + b);*/
//獲取三個整數中的最大值
int a = 10;
int b = 20;
int c = 30;
//先比較任意兩個數的值,找出這兩個數中的最大值
int temp = (a > b) ? a : b;
//用前兩個數的最大值與第三個數比較,獲取最大值
int max = (temp > c) ? temp : c;
System.out.println("max =" + max);
}
}
3.8 鍵盤錄入的基本格式講解
A:為什麼要使用鍵盤錄入資料
a:為了讓程式的資料更符合開發的資料
b:讓程式更靈活一下
B:如何實現鍵盤錄入呢?
先照格式來。
a:導包
格式: import java.util.Scanner;
位置: 在class上面。
b:建立鍵盤錄入物件
格式: Scanner sc = new Scanner(System.in);
c:通過物件獲取資料
格式: int x = sc.nextInt();
3.9 鍵盤錄入的練習1
* 鍵盤錄入練習:鍵盤錄入兩個資料,並對這兩個資料求和,輸出其結果
* 鍵盤錄入練習:鍵盤錄入兩個資料,獲取這兩個資料中的最大值
import java.util.Scanner; //匯入包中的類Scanner
class Test2_Scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//建立鍵盤錄入物件
//鍵盤錄入練習:鍵盤錄入兩個資料,並對這兩個資料求和,輸出其結果
/*System.out.println("請輸入第一個整數:");
int x = sc.nextInt();//將鍵盤錄入的資料儲存在x中
System.out.println("請輸入第二個整數:");
int y = sc.nextInt();//將鍵盤錄入的資料儲存在y中
int sum = x + y;
System.out.println(sum);*/
//鍵盤錄入練習:鍵盤錄入兩個資料,獲取這兩個資料中的最大值
System.out.println("請輸入第一個整數:");
int x = sc.nextInt();//將鍵盤錄入的資料儲存在x中
System.out.println("請輸入第二個整數:");
int y = sc.nextInt();//將鍵盤錄入的資料儲存在y中
int max = (x > y) ? x : y;//獲取x和y中的最大值
System.out.println("max = " + max);
}
}
3.10 鍵盤錄入的練習2
* 鍵盤錄入練習:鍵盤錄入兩個資料,比較這兩個資料是否相等
* 鍵盤錄入練習:鍵盤錄入三個資料,獲取這三個資料中的最大值
import java.util.Scanner; //導包
class Test3_Scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //建立鍵盤錄入物件
//鍵盤錄入練習:鍵盤錄入兩個資料,比較這兩個資料是否相等
/*System.out.println("請輸入第一個整數:");
int x = sc.nextInt(); //將鍵盤錄入的資料儲存在x中
System.out.println("請輸入第二個整數:");
int y = sc.nextInt(); //將鍵盤錄入的資料儲存在y中
//boolean b = (x == y)? true : false;
boolean b = (x == y);
System.out.println(b);*/
//鍵盤錄入練習:鍵盤錄入三個資料,獲取這三個資料中的最大值
System.out.println("請輸入第一個整數:");
int x = sc.nextInt(); //將鍵盤錄入的資料儲存在x中
System.out.println("請輸入第二個整數:");
int y = sc.nextInt(); //將鍵盤錄入的資料儲存在y中
System.out.println("請輸入第三個整數:");
int z = sc.nextInt(); //將鍵盤錄入的資料儲存在y中
//定義臨時變數記錄住比較出前兩個變數中的最大值
int temp = (x > y) ? x : y;
//將比較後的結果與第三個變數中的值比較,比較出三個數中的最大值
int max = (temp > z) ? temp : z;
System.out.println(max);
}
}
3.11 順序結構語句
- A:什麼是流程控制語句
- 流程控制語句:可以控制程式的執行流程。
- B:流程控制語句的分類
- 順序結構
- 選擇結構
- 迴圈結構
- C:執行流程:
- 從上往下,依次執行。
- D:案例演示
class Demo1_Sequence { //sequence 順序
public static void main(String[] args) {
System.out.println("Hello World!11111");
System.out.println("Hello World!3333");
System.out.println("Hello World!22222");
System.out.println("Hello World!44444");
}
}
3.12 選擇結構if語句格式1及其使用
- A:選擇結構的分類
- if語句
- switch語句
- B:if語句有幾種格式
- 格式1
- 格式2
- 格式3
- C:if語句的格式1
if(比較表示式) {
語句體;
}- D:執行流程:
- 先計算比較表示式的值,看其返回值是true還是false。
- 如果是true,就執行語句體;
- 如果是false,就不執行語句體;
class Demo1_If {
public static void main(String[] args) {
int age = 17;
if (age >= 18) {
System.out.println("可以瀏覽本網站");
}
System.out.println("完了");
}
}
3.13 選擇結構if語句注意事項
比較表示式無論簡單還是複雜,結果必須是boolean型別
if語句控制的語句體如果是一條語句,大括號可以省略;
如果是多條語句,就不能省略。建議永遠不要省略。
一般來說:有左大括號就沒有分號,有分號就沒有左大括號
class Demo2_If {
public static void main(String[] args) {
int age = 17;
if (age >= 18 && age <= 60) {
System.out.println("可以瀏覽本網站");
//int x = 10; 是兩句話,int x宣告是一句,x = 10 賦值是一句
}
System.out.println("完了");
}
}
3.14 選擇結構if語句格式2及其使用
- A:if語句的格式2
if(比較表示式) {
語句體1;
}else {
語句體2;
} - B:執行流程:
- 首先計算比較表示式的值,看其返回值是true還是false。
- 如果是true,就執行語句體1;
- 如果是false,就執行語句體2;
- C:案例演示
- a:獲取兩個資料中較大的值
- b:判斷一個數據是奇數還是偶數,並輸出是奇數還是偶數
- 注意事項:else後面是沒有比較表示式的,只有if後面有。
class Demo3_If {
public static void main(String[] args) {
/*int x = 0;
if (x == 1) {
System.out.println("男廁所歡迎您");
}else {
System.out.println("女廁所歡迎您");
}*/
//a:獲取兩個資料中較大的值
/*int x = 10;
int y = 20;
int z;
if (x > y) {
z = x;
}else {
z = y;
}
System.out.println(z);*/
//b:判斷一個數據是奇數還是偶數,並輸出是奇數還是偶數
int num = 11;
if (num % 2 == 0) {
System.out.println(num + "是一個偶數");
}else {
System.out.println(num + "是一個奇數");
}
}
}
3.15 if語句的格式2和三元的相互轉換問題
- A:案例演示
- if語句和三元運算子完成同一個效果
- B:案例演示
- if語句和三元運算子的區別
- 三元運算子實現的,都可以採用if語句實現。反之不成立。
- 什麼時候if語句實現不能用三元改進呢?
- 當if語句控制的操作是一個輸出語句的時候就不能。
- 為什麼呢?因為三元運算子是一個運算子,運算子操作完畢就應該有一個結果,而不是一個輸出。
class Demo4_If {
public static void main(String[] args) {
int x = 10;
int y = 20;
int z;
if (x > y) {
//z = x;
System.out.println(x + "是最大值");
}else {
//z = y;
System.out.println(y + "是最大值");
}
//System.out.println(z);
int a = 20;
int b = 30;
int c = (a > b)? a : b;
}
}
3.16 選擇結構if語句格式3及其使用
A:if語句的格式3:
if(比較表示式1) {
語句體1;
}else if(比較表示式2) {
語句體2;
}else if(比較表示式3) {
語句體3;
}
...
else {
語句體n+1;
}
B:執行流程:
首先計算比較表示式1看其返回值是true還是false,
如果是true,就執行語句體1,if語句結束。
如果是false,接著計算比較表示式2看其返回值是true還是false,
如果是true,就執行語句體2,if語句結束。
如果是false,接著計算比較表示式3看其返回值是true還是false,
如果都是false,就執行語句體n+1。
C:注意事項:最後一個else可以省略,但是建議不要省略,可以對範圍外的錯誤值提示
class Demo5_If {
public static void main(String[] args) {
int x = 2;
if (x == 1) {
System.out.println("先生歡迎您");
}else if (x == 0) {
System.out.println("女生歡迎您");
}else {
System.out.println("無法識別您的性別");
}
}
}
3.17 選擇結構if語句格式3練習
A:練習1
需求:鍵盤錄入一個成績,判斷並輸出成績的等級。
90-100 優
80-89 良
70-79 中
60-69 及
0-59 差
B:練習2
需求:鍵盤錄入x的值,計算出y的並輸出。
x>=3 y = 2 * x + 1;
-1
x<=-1 y = 2 * x - 1;
import java.util.Scanner;
class Test1_If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//需求:鍵盤錄入一個成績,判斷並輸出成績的等級。
/*System.out.println("請輸入學生成績範圍在1到100之間");
int x = sc.nextInt();
if (x >= 90 && x <= 100) {
System.out.println("優");
}else if (x >= 80 && x <= 89 ) {
System.out.println("良");
}else if (x >= 70 && x <= 79 ) {
System.out.println("中");
}else if (x >= 60 && x <= 69 ) {
System.out.println("及");
}else if (x >= 0 && x <= 59 ) {
System.out.println("差");
}else {
System.out.println("成績錄入錯誤");
}*/
//需求: 鍵盤錄入x的值,計算出y的並輸出
System.out.println("請輸入一個整數:");
int x = sc.nextInt();
int y = 0;
if (x >= 3) {
y = 2 * x + 1;
}else if (x > -1 && x < 3) {
y = 2 * x;
}else if (x <= -1) {
y = 2 * x - 1;
}
System.out.println(y);
}
}
3.18 選擇結構if語句的巢狀使用
需求:獲取三個資料中的最大值(if的巢狀使用)
class Demo6_IfIf {
public static void main(String[] args) {
int a = 40;
int b = 50;
int c = 30;
if (a > b) {
if (a > c) {
System.out.println(a + "是最大值");
}else {
System.out.println(c + "是最大值");
}
}else { //b >= a
if (b > c) {
System.out.println(b + "是最大值");
}else {
System.out.println(c + "是最大值");
}
}
}
}
3.19 選擇結構switch語句的格式及其解釋
A:switch語句的格式
int x = 10;
switch(表示式) { //基本資料型別可以接收byte,short,char,int
case 值1: //引用資料型別可以接收列舉(JDK1.5)String字串(JDK1.7)
語句體1;
break;
case 值2:
語句體2;
break;
…
default:
語句體n+1;
break;
}
B:執行流程
先計算表示式的值,然後和case後面的匹配,如果有就執行對應的語句,否則執行default控制的語句
class Demo1_Switch {
public static void main(String[] args) {
String name = "rose";
String gender = "妖";
switch (gender) {
case "男士":
System.out.println(name + "是一位" + gender + "喜歡吃飯睡覺打dota");
break;
case "女士":
System.out.println(name + "是一位" + gender + "喜歡逛街購物美容");
break;
default:
System.out.println(name + "是一位" + gender + "打雌性激素維持美貌容顏");
break;
}
}
}
3.20 選擇結構switch語句的練習
給定一個值,輸出對應星期幾
class Test1_Switch {
public static void main(String[] args) {
int week = 1;
switch (week) {
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;
default:
System.out.println("對不起沒有對應的星期");
break;
}
}
}
3.21 選擇結構switch語句的注意事項
A:案例演示
- a:case後面只能是常量,不能是變數,而且,多個case後面的值不能出現相同的
b:default可以省略嗎?
-
- 可以省略,但是不建議,因為它的作用是對不正確的情況給出提示。
- 特殊情況:
- case就可以把值固定。
- A,B,C,D
c:break可以省略嗎?
-
- 最後一個可以省略,其他最好不要省略
- 會出現一個現象:case穿透。
- 最終我們建議不要省略
d:default一定要在最後嗎?
-
- 不是,可以在任意位置。但是建議在最後。
e:switch語句的結束條件
-
- a:遇到break就結束了
- b:執行到switch的右大括號就結束了
3.22 選擇結構switch語句練習
class Test2_Switch {
public static void main(String[] args) {
// A:看程式寫結果:
/*int x = 2;
int y = 3;
switch(x){
default:
y++;
break;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y);*/
//B:看程式寫結果:
int x = 2;
int y = 3;
switch(x){
default:
y++;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y);
}
}
3.23 選擇結構if語句和switch語句的區別
A:總結switch語句和if語句的各自使用場景
switch建議判斷固定值的時候用
if建議判斷區間或範圍的時候用
B:案例演示
分別用switch語句和if語句實現下列需求:
鍵盤錄入月份,輸出對應的季節
import java.util.Scanner;
class Test3_SwitchIf {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //建立鍵盤錄入物件
System.out.println("請輸入月份");
int month = sc.nextInt(); //將鍵盤錄入的結果儲存在month
/*switch (month) {
case 3:
case 4:
case 5:
System.out.println(month + "月是春季");
break;
case 6:
case 7:
case 8:
System.out.println(month + "月是夏季");
break;
case 9:
case 10:
case 11:
System.out.println(month + "月是秋季");
break;
case 12:
case 1:
case 2:
System.out.println(month + "月是冬季");
break;
default:
System.out.println("對不起沒有對應的季節");
break;
}*/
//用if語句來完成月份對應季節
if (month > 12 || month < 1) {
System.out.println("對不起沒有對應的季節");
}else if (month >= 3 && month <= 5) {
System.out.println(month + "月是春季");
}else if (month >= 6 && month <= 8) {
System.out.println(month + "月是夏季");
}else if (month >= 9 && month <= 11) {
System.out.println(month + "月是秋季");
}else {
System.out.println(month + "月是冬季");
}
}
}