1. 程式人生 > 其它 >程式設計日記:Java學習之路(三)

程式設計日記:Java學習之路(三)

3.Java分支語句

3.1資料型別轉換

Java是強型別的語言,資料的型別和儲存資料的變數的型別必須一致。

那麼int型別的變數能不能儲存byte型別的資料呢?

byte型別的變數能不能儲存int型別的資料呢?

一般情況下,小的資料可以放在大的資料型別中,JVM可以實現自動型別轉換。

如果要把大的資料放進小的變數中,需要手動型別轉換:

變數=(變數型別)值;

int a = 10;
byte b = (byte)a;

注意:

(1)手動型別轉換有可能會造成資料丟失

·大整型轉變為小整型:拋棄高位元組,保留低位元組

·浮點轉變為整型:拋棄小數部分,保留整數部分

·雙精度浮點轉變為單精度浮點:損失資料精度

(2)不是所有的型別都能手動進行型別轉換

·boolean型別不能和其他基本型別互相轉換

自動型別提升:兩個數值參與運算,會發生自動型別提升

規則:參與運算的兩個數值:如果有double型別,運算結果為double型別,如果有float型別,運算結果為float型別,如果有long型別,運算結果為long型別,否則運算結果為int型別

3.2運算子

運算子分為數學運算子,賦值運算子,布林運算子,位運算子和三元運算子

數學運算子:+,-,*,/(兩個整型運算的結果還是整型,小數部分被捨棄),%

賦值運算子:=:把右邊的值賦給左邊的變數

注意:左邊必須是變數不能是表示式或者常數

賦值運算子:+=,-=,*=,/=,%=……

自增自減運算子:++,--,此類運算子不會發生自動型別提升。

布林運算子:

==:判斷兩邊的值是否相等,相等則值為true,否則值為false

<,<=,>,>=,!=:判斷不等式是否成立

布林運算子:

!:邏輯非:!false = true !true = false

&&:邏輯與 同真為真

||:邏輯或 有真為真

位運算子:

&、|既是位運算子,也是邏輯運算子,作用和&&、||相同。
&&、||是短路運算子
&、|是非短路運算子
短路運算:當一個子表示式的值能決定整個表示式的值時,後面的所有子表示式的值不再計算。

三元運算子:a?b:c

規則:a為布林表示式,b和c為同一型別的表示式或值,當a為ture時,整個表示式為b的值,否則為c的值。(表示式是可以巢狀的)

3.3順序語句

Java中的語句分為:順序語句,分支語句,迴圈語句,控制語句,在Java中使用分號表示一個語句的結束。

順序語句:

(1)賦值語句:給變數賦值

(2)輸入語句:把資料傳入到Java虛擬機器內部

(3)輸出語句:把Java虛擬機器內部的資料傳出

(4)函式呼叫語句:執行一段特定的程式碼

輸入語句:

Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
double d = scanner.nextDouble();
String s1 = scanner.next();
String s2 = scanner.nextLine();
scanner.close();

輸出語句:

System.out.println(10);
System.out.println("10");
System.out.println();
System.out.print(10);
System.out.print("10");
System.out.print();

3.4分支語句

當某個條件滿足時才執行某個程式碼塊

if語句:

if(布林表示式){
    
}

if(布林表示式){

}else{

}

多分支的if語句:在if和else之間,可以寫若干個else if,使if語句實現多個分支:

if ( 布林表示式 ) {……}        // 第一個分支
else if( 布林表示式 ) {……}    // 第二個分支
else if( 布林表示式 ) {……}    // 第三個分支
else {……}                // 第四個分支

if else語句是可以進行巢狀使用的,也就是if else語句中還可以寫if else語句

switch語句:

if (a == 1) {
    System.out.println("a = 1");
} else if (a == 2) {
    System.out.println("a = 2");
} else if (a == 3) {
    System.out.println("a = 3");
} else {
    System.out.println("error");
}

if語句還是存在一些問題的,比如,如果所有的if/else語句中if語句中的布林表示式都為false,會導致程式碼的執行效率低,這個時候我們就可以選擇使用switch語句來進行選擇分支

//
switch( 表示式 ) {
    case 值1: 
        //
    case 值2:
        //
    case 值3:
        //
}
//

switch語句表示式的型別:byte,short,int,char,java.lang.String,列舉,不能是boolean型別

case後面值的型別:必須是常量或者列舉值,不能是表示式

switch語句存在的問題:
在每一個分支中的程式碼塊執行完以後,不會跳出switch語句,而是會繼續執行下一個分支中的程式碼塊,直到整個switch語句執行完為止。
如果想在執行完一個程式碼塊後就跳出switch語句,需要在每個分支的程式碼塊最後增加break語句。

如果表示式的值和case後面的值都不相等,可以使用default子句,這時會執行default後面的程式碼塊。

switch語句總結:可以有多個case子句,最多有一個default子句,case和default子句的順序無關緊要。

在switch語句中可以巢狀switch語句,同時也可以和if語句相互巢狀

3.5練習

(1)從鍵盤輸入一個表示年份的正整數,輸出此年份是平年還是閏年。請使用至少兩種方法實現。

import java.util.Scanner;
public class Java_day03_01 {
    public static void main(String[] args){
        Scanner year = new Scanner(System.in);
        int years = year.nextInt();
        if(years%400==0){
            System.out.println("閏年");
        }
        else if (years%4==0 && years%100!=0){
            System.out.println("閏年");
        }
        else{
            System.out.println("平年");
        }
    }
}

(2)從鍵盤輸入一個表示百分制分數的正整數,請使用switch語句實現按以下規則輸出中文分數:
100~90:優 89~80:良 79~70:中
69~60:及格 59~0:不及格 其它:錯誤

import java.util.Scanner;

public class Java_day03_02 {
    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        int num = s.nextInt();
        switch (num/10){
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            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:
            case 10:System.out.println("優");break;
            default:System.out.println("錯誤");break;
        }

    }
}

(3)從鍵盤輸入任意三個整數,請使用三元運算子找出這三個整數中的最大值並輸出。

import java.util.Scanner;
public class Java_day03_03 {
    public static void main(){
        Scanner a = new Scanner(System.in);
        int q = a.nextInt();
        int w = a.nextInt();
        int e = a.nextInt();
        int max = q>w?q:w;
        max = max<e?e:max;
        System.out.println(max);
    }
}