天天看點

第二章 Java基本文法(二)

本文主要内容:

運算符、if-else、switch-case

一、位運算符

第二章 Java基本文法(二)
第二章 Java基本文法(二)

運算符之五:位運算符

每左移一位,相當于是在原來的基礎上乘2.

int i = 21;

System.out.println(“i<<2:”+(i<<2));

輸出:i<<2:84

結論:

1.位運算符操作的都是整形的資料

2.<<:在一定範圍内,每向左移一位,相當于*2

3.>>: 在一定範圍内,每向右移一位,相當于/2

第二章 Java基本文法(二)

交換兩個變量的值:

方式一:定義臨時變量

int temp = num1;
num1 = num2;
num2 = temp;
           

方式二:

num1 = num1+num2;
num2 = num1 - num2;
num1 = num1 - num2;
           

方式三:位運算符

第二章 Java基本文法(二)
第二章 Java基本文法(二)
第二章 Java基本文法(二)

三元運算符:

1.結構:(條件表達式)?表達式1:表達式2

2.說明

①條件表達式的結果為boolean類型

②根據條件表達式真或假,決定執行表達式1還是表達式2

如果表達式為true,則執行表達式1,如果表達式為false,則執行表達式2

③表達式1和表達式2要求是一緻的

double num = (m>m)? 2 : 1.0;
String maxStr = (m>n) ? "m大" : ((m==n) ? "m和n相等":"n大");
           

擷取三個值的最大值

int n1 = 12;
int n2 = 30;
int n3 = -43;
int max1 = (n1>n2) ? n1: n2;
int max2 = (max1 > n3) ? max1 : n3 ;
System.out.println("三個數中的最大值為:"+"max2");]
           

凡是可以使用三元運算符的地方,都可以改寫成if-else

反之,不成立。

如果程式既可以選擇三元運算符,又可以選擇if-else,則優先選擇三元運算符。原因:簡潔,執行效率高

第二章 Java基本文法(二)

二、流程控制語句

說明:

1.else結構是可選的

2.針對于條件表達式:

如果多個條件表達式之間是“互斥”關系(或沒有交集的關系),哪個判斷和執行語句聲明在上面還是下面,無所謂。

3.如果多個條件表達式之間有交集的關系,需要根據實際情況,考慮清楚應該哪個結構聲明在上面。

4.如果多個條件表達式之間有包含關系,通常情況下,需要将範圍小的聲明在範圍大的上面。否則,範圍小的就沒機會執行了。

5.if-else結構是可以互相嵌套的

第一種:

if(條件表達式){

執行表達式

}

第二種:二選一

if(條件表達式){

執行表達式1

}else{

執行表達式2

}

第三種:多選一

if(條件表達式){

執行表達式1

}else if(條件表達式){

執行表達式2

}else if{條件表達式}{

執行表達式2

}

第二章 Java基本文法(二)
第二章 Java基本文法(二)

彩票中獎的程式:

系統生成一個随機兩位數(10-99),與輸入的數比對兩位獎勵10000,比對一位獎勵1000,兩個數字順序颠倒獎勵3000,一個數字對位置不對獎勵500,其他情況無獎勵。

import java.util.Scanner;
public class test {
    public static void main(String[] args) {
       Scanner scan = new Scanner(System.in);
       
       System.out.println("請輸入你的資料:");
        int num = scan.nextInt();
       
        //生成[10,99)之間的數。
        int value = (int)(Math.random()*90+10);
        System.out.println(value);
       
        if(num%10 ==value%10) {
               if(num/10 == value/10) {
                      System.out.println("獎勵10000美元!");
               }
               else {
                      System.out.println("獎勵1000美元");
               }
               }
        else {
               if(num/10 == value/10) {
                      System.out.println("獎勵1000美元!");
            }
               else {System.out.println("沒有獎勵");}
        }
        if((num/10 == value%10) && num%10 == value/10) {
               System.out.println("獎勵3000美元");
               }
        if((num/10 == value%10) && num%10 != value/10) {
               System.out.println("獎勵500美元");
               }
        if((num/10 != value%10) && num%10 == value/10) {
               System.out.println("獎勵3000美元");
               }
    }
}
           

如何從鍵盤擷取不同類型的變量:需要使用Scanner類

具體實作步驟:

1.導包:import java.util.Scanner;

2.Scanner的執行個體化:Scanner scan =new Scanner(System.in)

3.調用Scanner類的相關方法(next()/nextXxx()),來擷取指定類型的變量

注意:

需要根據相應的方法,來輸入指定類型的值。如果輸入的資料與要求的類型不比對時,會報異常:InputMisMatchException,導緻程式終止

我的實作:

代碼:

import java.util.Scanner;

class ScannerTest{
    public static void main(String[] args){
        Scanner scan =new Scanner(System.in);
        
        int num = scan.nextInt();
        System.out.println(num);    
    }
}
           
第二章 Java基本文法(二)
第二章 Java基本文法(二)

除了String類型寫scan.next(); 其它資料類型都寫清楚是什麼類型的,比如

scan.nextInt();

對于char型的擷取,Scanner沒有提供相關的方法,隻能夠輸入一個字元串。

System.out.println("請輸入你的性别:(男/女)");
String gender = scan.next();  //"男"
char genderChar = gender.charAt(0);    //擷取索引為0位置上的字元
           
第二章 Java基本文法(二)

switch-case結構

第二章 Java基本文法(二)

說明:

1.根據switch表達式中的值,依次比對各個case中的常量。一旦比對成功,則進入相應case結構中,調用其執行語句。

當調用完執行語句後,則仍然繼續向下執行其他case結構中的執行語句,直到遇到break關鍵字或此switch-case結構末尾為止結束

第二章 Java基本文法(二)

2.break可以使用在switch-case 結構中,一旦執行到break語句,則跳出switch-case結構。

3.switch結構中的表達式,隻能是如下的6種資料類型之一:byte、short、char、int、枚舉類型(JDK5.0新增)、String類型(JDK7.0新增)。

4.break關鍵字是可選的

5.case之後隻能聲明常量,不能聲明範圍

6.default相當于if-else結構中的else

default結構是可選的,而且位置是靈活的。

如果switch-case結構中的多個case的執行語句相同,則可以考慮進行合并。

7.凡是可以使用switch-case的結構,都可以轉換為if-else,反之不成立。

8.我們寫分支結構是,當發現既可以使用switch-case,(t同時switch中表達式的取值情況不太多),又可以使用if-else時,我們優先選擇使用switch-case.

原因:switch-case執行效率稍高。

編寫程式:從鍵盤上輸入2020年的“month”和“day”,要求通過程式輸出輸入的日期是2020年的第幾天

import java.util.Scanner;
class SwitchCaseTest2 {
    public static void main(String[] args) {
        
        Scanner scan = new Scanner(System.in);
        System.out.println("請輸入2019年的month:");
        int month = scan.nextInt();
        System.out.println("請輸入2019年的day:");
        int day = scan.nextInt();


        //定義一個變量來儲存總天數
        int sumDays = 0;

        switch(month){
        case 12:
            sumDays += 30;
        case 11:
            sumDays += 31;
        case 10:
            sumDays += 30;
        case 9:
            sumDays += 31;
        case 8:
            sumDays += 31;
        case 7:
            sumDays += 30;
        case 6:
            sumDays += 31;
        case 5:
            sumDays += 30;
        case 4:
            sumDays += 31;
        case 3:
            sumDays += 28;
        case 2:
            sumDays += 31;
        case 1:
            sumDays += day;
        }
        System.out.println("2019年" + month + "月" + day + "日是當年的第" + sumDays + "天");
    }
}