day02
一.數(shù)據(jù)類型轉(zhuǎn)換
按照取值范圍從小到大排列:byte,short,char-->int-->long-->float-->double
數(shù)據(jù)類型轉(zhuǎn)換什么時候發(fā)生?? ?
等號左右兩邊的數(shù)據(jù)類型不一致
自動類型轉(zhuǎn)換
自動類型轉(zhuǎn)換:
? ? ?? 取值范圍大的數(shù)據(jù)類型 變量名 = 取值范圍小的數(shù)據(jù)類型
代碼演示:
public class Demo01DataType {
?? public static void main(String[] args) {
? ? ?? /*
? ? ? ? ? 等號右邊的10默認類型是int型
? ? ? ? ? 將int型的10賦值給了long型的變量l,符合取值范圍小的數(shù)據(jù)類型賦值給取值范圍大的數(shù)據(jù)類型
? ? ? ? ? 發(fā)生了自動類型轉(zhuǎn)換
? ? ? ? */
? ? ? long l = 10;
? ? ? double d = 10;
?? }
}
強制類型轉(zhuǎn)換
1.什么時候發(fā)生?
? ? ? ? 取值范圍小的數(shù)據(jù)類型 變量名 = 取值范圍大的數(shù)據(jù)類型
2.解決:
? ? ? ? 取值范圍小的數(shù)據(jù)類型 變量名 =(取值范圍小的數(shù)據(jù)類型) 取值范圍大的數(shù)據(jù)類型
3.代碼演示:
public class Demo02DataType {
?? public static void main(String[] args) {
? ? ?? /*
? ? ? ? ? 2.5默認類型是double,此代碼是將double型的2.5賦值給了int型的變量i
? ? ? ? ? 由于double取值范圍大,int型的取值范圍小,那么代碼需要強制類型轉(zhuǎn)換
? ? ? ? */
? ? ?? //int i = 2.5;
? ? ?? int i = (int)2.5;
? ? ?? int i1 = (int)100L;
? ? ?? int j = 10;
? ? ?? double k = 20.5;
? ? ?? /*
? ? ? ? ? 一個小類型的和一個大類型的做運算,小類型的會自動提升為大類型的
? ? ? ? */
? ? ?? int sum = (int)(j+k);
?? }
}
4.注意事項:
? 1.我們不要隨便寫強制類型轉(zhuǎn)換(除非是硬性需要),會出現(xiàn)精度損失,數(shù)據(jù)溢出
? 2.byte,short,char參與運算的時候,會首先被提升為int型(char類型提升為int之后,會去一個碼表中查詢該字 ? ? 符對應(yīng)的int值)
二.運算符
1.算數(shù)運算符
? 基本算數(shù)運算符:
? ? +:加法,和字符串拼接(任何類型遇到字符串都會變成字符串)
? ? -
? ? *
? ? /:取的是整數(shù)部分
? ? %(模):取余數(shù)
? 自增和自減:變化1
? ? 1.格式:變量++ ? ++變量 ? ? 變量-- ? ? --變量
? ? 2.單獨使用:自己獨立成為一句
? ? ?? i++;
? ? ? 注意:符號在前或者在后沒有區(qū)別
? ? ? 混合使用:和輸出語句,賦值語句混合使用了
? ? ? 注意:符號在前(先運算,再使用-->先運算,運算之后,再用運算后的值)
? ? ? ? ? 符號在后(先使用,再運算-->先使用原值,使用完了以后,再運算)
? ? 3.注意:
? ? ?? 不要作死
2.關(guān)系運算符
比較運算符:結(jié)果肯定是boolean類型
? ?? ==? :判斷兩個數(shù)是否相等,相等返回true,不相等false
? ?? >:判斷前面的是否比后面的大,大的話true,否則false
? ?? <:判斷前面的是否比后面的小,小的話true,否則false
? ?? >=:判斷前面的是否比后面的大或者相等,如果大或者相等返回true,否則false
? ?? <=:判斷前面的是否比后面的小或者相等,如果小或者相等返回true,否則false
? ?? !=:判斷兩個數(shù)是否不等,如果不等返回true,如果相等返回false
代碼演示:
?? public class Demo01BiJiao {
?? public static void main(String[] args) {
? ? ?? int i = 20;
? ? ?? int j = 20;
? ? ?? boolean result01 = i==j;
? ? ?? System.out.println(result01);
? ? ?? System.out.println(i<j);
? ? ?? System.out.println(i!=j);
? ? ?? System.out.println(i>=j);
? ? ?? System.out.println(1>=5);
?? }
}
3.賦值運算符
賦值運算符:
? ? 基本:=
? ? ?? int i = 10
? ? 復(fù)合:
? ? ? ? +=
? ? ? ? ?? int i =10;
? ? ? ? ?? i+=2-->i = i+2
? ? ? ? -=
? ? ? ? ?? i-=2-->i = i-2
? ? ? ? *=
? ? ? ? ?? i*=2-->i = i*2
? ? ? ? /=
? ? ? ? ?? i/=2-->i = i/2
? ? ? ? %=
? ? ? ? ?? i%=3-->i = i%3
? ? byte,short,char參與運算的時候會被提升為int型,但是遇到復(fù)合賦值運算符,不用強轉(zhuǎn)
代碼演示:
?? public class Demo01FuZhi {
?? public static void main(String[] args) {
? ? ?? int i = 10;
? ? ?? /*i+=2;//i = i+2
? ? ?? System.out.println(i);
? ? ?? */
? ? ?? //System.out.println(i/=3);
? ? ?? System.out.println(i%=3);
? ? ?? byte b = 10;
? ? ?? b+=20;//b = b+20
? ? ?? System.out.println(b);
?? }
}
4.邏輯運算符
邏輯運算符:boolean表達式 邏輯運算符 boolean表達式
? ?? &&:與
? ? ? ? 有假則假:符號前后有一個boolean表達式是false,那么整體就是false
? ? ? ? 特點:短路效果(符號前面為false,符號后面不判斷了)
? ?? ||:或
? ? ? ? 有真則真:符號前后有一個boolean表達式是true,那么整體就是true
? ? ? ? 特點:短路效果:如果符號前為true,后面不看
? ?? !:非
? ? ? ? 取反
? ?? ^:異或(不用)
? ? ? ? a和b結(jié)果不同為true,相同為false
? 擴展:判斷一個變量是否是1-100之間的數(shù)
? ? ?? 1<=x<=100? 錯誤寫法
? ? ?? x>=1 && x<=100? 正確寫法
? ? ?? 1<=x && 100>=x ? 正確寫法
代碼演示:
? public class Demo01LuoJi {
?? public static void main(String[] args) {
? ? ? int i = 10;
? ? ? int j = 20;
? ? ? int k = 20;
? ? ? boolean result = (i>k)&&(i>j);
? ? ? System.out.println(result);
? ? ? System.out.println((i<k)||(i>j));
? ? ? System.out.println(!((i<k)||(i>j)));
? ? ? System.out.println((i<k)^(i<j));
?? }
}
5.三元運算符
格式:boolean表達式?表達式1:表達式2
執(zhí)行流程:
? ? ? ?? 1.走boolean表達式,如果是true,走?后面的表達式1
? ? ? ?? 2.否則走:后面的表達式2
代碼演示:
?? public class Demo01SuanYuan {
?? public static void main(String[] args) {
? ? ?? /*
? ? ? ?? 需求:定義一個變量,當分數(shù),判斷這個分數(shù)是否及格
? ? ? ? */
? ? ?? int score = 60;
? ? ?? String result = (score>=60)?"及格":"不及格";
? ? ?? System.out.println(result);
?? }
}
--------------------------------------------------------------------
練習:
? /*
? 求出三個數(shù)的最大值
? 分析:
? ? ? 1.比較前兩個數(shù),拿較大的
? ? ? 2.拿著較大的值和第三個比,再拿大的
*/
public class Demo02Test {
?? public static void main(String[] args) {
? ? ?? int i = 10;
? ? ?? int j = 50;
? ? ?? int z = 30;
? ? ?? int temp = (i>j)?i:j;
? ? ?? int result = (temp>z)?temp:z;
? ? ?? System.out.println(result);
?? }
}
三.Scanner:鍵盤錄入
Scanner:
? ?? 1.概述:類? Java自帶的類
? ?? 2.數(shù)據(jù)類型:引用數(shù)據(jù)類型
? ?? 3.作用:可以通過鍵盤錄入的形式將數(shù)據(jù)放到代碼中
? ?? 4.用法:
? ? ? ? ? ? 導(dǎo)包:idea自動導(dǎo)包-->alt+回車
? ? ? ? ? ? 創(chuàng)建對象:Scanner 變量名 = new Scanner(System.in)
? ? ? ? ? ? 調(diào)用方法:變量名.方法名()
? ? ? ? ? ? ? ? ? ? next():錄入字符串
? ? ? ? ? ? ? ? ? ? nextInt():錄入整數(shù)
? ? ? ? ? ? ? ? ? ? nextDouble():錄入小數(shù)
? ? ? ? ? ? ? ? ? ? nextxxx()
代碼演示:
?? public class Demo01Scanner {
?? public static void main(String[] args) {
? ? ?? Scanner sc = new Scanner(System.in);
? ? ?? System.out.println("請你輸入用戶名:");
? ? ?? String s = sc.next();
? ? ?? System.out.println(s);
? ? ?? System.out.println("請你輸入密碼:");
? ? ?? String p = sc.next();
? ? ?? System.out.println(p);
? ? ?? System.out.println("登錄成功");
?? }
}
------------------------------------------------------------------------------------------------
練習:
? /*
? Scanner練習(鍵盤錄入三個整數(shù),利用三元求出最大值)
? ? ? 步驟:
? ? ? ?? 1.創(chuàng)建Scanner對象:Scanner sc = new Scanner(System.in);
? ? ? ?? 2.連續(xù)調(diào)用3次nextInt方法,鍵盤錄入3個整數(shù)
? ? ? ?? 3.利用三元運算符求出前兩個數(shù)的較大值
? ? ? ?? 4.拿著較大的值和第三次錄入的數(shù)比較,再拿較大的
*/
public class Demo02ScannerTest {
?? public static void main(String[] args) {
? ? ?? Scanner sc = new Scanner(System.in);
? ? ?? System.out.println("請你輸入第一個整數(shù):");
? ? ?? int a = sc.nextInt();
? ? ?? System.out.println("請你輸入第二個整數(shù):");
? ? ?? int b = sc.nextInt();
? ? ?? System.out.println("請你輸入第三個整數(shù):");
? ? ?? int c = sc.nextInt();
? ? ?? //利用三元運算符求出最大值
? ? ?? int temp = (a>b)?a:b;
? ? ?? int result = (temp>c)?temp:c;
? ? ?? System.out.println("最大值是:"+result);
?? }
}
四.分支語句
if語句:
格式:
? ? if(boolean表達式){
? ? ? 執(zhí)行語句
? ? }
? ? 執(zhí)行流程:
? ? ? 1.走if后面的boolean表達式
? ? ? 2.如果返回true,那么就走if后面大括號中的執(zhí)行語句
? 使用場景:
? ? ? 有一種情況的,if
代碼演示:
? public class Demo01If {
? ? public static void main(String[] args) {
? ? ? ? /*
? ? ? ? ? 定義一個變量,判斷是否大于10
? ? ? ? */
? ? ? ? int i = 10;
? ? ? ? if (i>10) {
? ? ? ? ? ? System.out.println("大于10");
? ? ? ? }
? ? ? ? System.out.println("我要執(zhí)行");
? ? }
}
if..else語句:
? 格式:
? ? ? if(boolean表達式){
? ? ? ? 執(zhí)行語句1
? ? ? }else{
? ? ? ? 執(zhí)行語句2
? ? ? }
? ? 執(zhí)行流程:
? ? ? 1.走if后面的boolean表達式
? ? ? 2.如果返回true,那么就走if后面大括號中的執(zhí)行語句1
? ? ? 3.否則,走else后面大括號中的執(zhí)行語句2
? ? 使用場景:
? ? ? ? 2種情況
--------------------------------------------------------------------------------? ? ? ?
? ? 代碼演示:
? ? ? /*
? ? ? ? 練習:
? ? ? ? 鍵盤錄入一個數(shù),判斷奇偶
? ? 步驟:
? ? ? 1.創(chuàng)建Scanner:Scanner sc = new Scanner(System.in)
? ? ? 2.調(diào)用nextInt()錄入一個整數(shù)
? ? ? 3.利用if語句? %2==0,如果等等于0,輸出是偶數(shù)
? ? ? 4.否則就是奇數(shù)
*/
public class Demo03IfElseTest {
? ? public static void main(String[] args) {
? ? ? ? Scanner sc = new Scanner(System.in);
? ? ? ? int a = sc.nextInt();
? ? ? ? if (a%2==0){
? ? ? ? ? ? System.out.println("是偶數(shù)");
? ? ? ? }else{
? ? ? ? ? ? System.out.println("是奇數(shù)");
? ? ? ? }
? ? }
}
else if語句:
格式:
? ? ? if(boolean表達式){
? ? ? ? 執(zhí)行語句1
? ? ? }else if(boolean表達式){
? ? ? ? 執(zhí)行語句2
? ? ? }else if(boolean表達式){
? ? ? ? 執(zhí)行語句3
? ? ? }....{
? ? ? }else{
? ? ? ? 執(zhí)行語句n
? ? ? }
執(zhí)行流程:
? ? ? 1.走if后面boolean表達式,如果是true,就走if后面的大括號中的執(zhí)行語句1
? ? ? 2.如果是false,就走else if后面的boolean表達式,如果是true,就執(zhí)行對應(yīng)的執(zhí)行語句2
? ? ? 3.如果還是false,那么就繼續(xù)走下一個else if 接著判斷
? ? ? 4.如果以上所有的判斷都不成立,那么執(zhí)行else
使用場景:
? ? ? 2種情況以上的判斷
代碼演示:
? ? 練習:鍵盤錄入一個分數(shù),劃分等級,獲取對應(yīng)的獎勵
? ? ? 95~100 山地自行車一輛
? ? ? 90~94 游樂場玩一次
? ? ? 80~89 變形金剛玩具一個
? ? ? 80以下 胖揍一頓
? public class Demo04ElseIf {
? ? public static void main(String[] args) {
? ? ? Scanner sc = new Scanner(System.in);
? ? ? System.out.println("請你輸入一個分數(shù):");
? ? ? int score = sc.nextInt();
? ? ? if (score>=95 && score<=100){
? ? ? ? ? System.out.println("獎勵日本女演員一個!");
? ? ? }else if(score>=90 && score<=94){
? ? ? ? ? System.out.println("獎勵日本男演員一個!");
? ? ? }else if(score>=80 && score<=89){
? ? ? ? ? System.out.println("獎勵日本小電影網(wǎng)站一個!");
? ? ? }else if(score>100 || score<0){
? ? ? ? ? System.out.println("數(shù)據(jù)錯誤");
? ? ? }else{
? ? ? ? ? System.out.println("弄死");
? ? ? }
? ? }
}