Java中的byte類型及用if-else對三個數排序

1、byte類型是Java的基本數據類型,佔一個字節,2^8,表數範圍:-128~127

public class TestByte {
    public static void main(String[] args) {
        byte b1 = 1;
        b1++;
        b1 = b1 + 1;
    }
}

編譯時出現以下錯誤:

TestByte.java:5: 錯誤: 可能損失精度
               b1 = b1 + 1;
                       ^
   需要: byte
   找到:    int
1 個錯誤
是因爲 b1 + 1 中的常量 1 是默認爲一個 int 類型數據,相加結果不能賦給 byte 類型
	byte b1 = 1;
        byte b2 = 1;
        byte b3 = 1 + 1;
        byte b4 = b1 + b2; //可以改爲byte b4 = (byte)(b1 + b2)
編譯時第 4 行還是出現同樣的問題,因爲 byte 在計算時首先要轉換爲 int 類型,其結果也不能賦給 byte 類型。
3 行和4 行的區別:編譯器在編譯時,在判斷右邊數值的時候發現是 int 類型(是“常量”),但會判斷是不是在 byte 類型(-128~127)範圍之內,如果在這個範圍之中的話,會給右邊的 int 類型做默認的強制轉換,把最後的一個字節賦值到了 b3 這個變量當中,b1 和 b2 是“變量”意味着這兩個值不確定、可能隨時變化,編譯器無法檢查,也無法確定是否在 byte 類型範圍之內,檢查不了就會報錯(可能丟失精度),如果是“常量”編譯器就能夠判斷。

2、輸入 3 個數,再按從小到大的順序輸出

過程:
1,導入類 util.java
2,創建 scanner 對象
3,調用 scanner 對象的 nextInt() 方法返回一個 int 類型數據
4,排序,先對 num1 和 num2 排序,num1 存放小的,num2 存放大的,num3 就只有三個可能
  ?num3?  num1  ?num3?  num2  ?num3?
----------------+----------------------+--------------->

小                                                                   大

code list:

import java.util.Scanner;
public class TestSort {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("num1=");
        int num1 = scanner.nextInt();

        System.out.print("num2=");
        int num2 = scanner.nextInt();

        System.out.print("num3=");
        int num3 = scanner.nextInt();

        int tmp;
        if (num1 > num2) {
            tmp = num1;
            num1 = num2;
            num2 = tmp;
        }
        
        if (num3 > num2) {
            System.out.print(num1 + " " + num2 + " " + num3);
        } else if (num3 > num1) {
            System.out.print(num1 + " " + num3 + " " + num2);
        } else {
            System.out.print(num3 + " " + num1 + " " + num2);
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章