1. 程式人生 > >thinking in java test4.3練習(1)(2)(3)(4)(5)用三元操作符和按位操作來顯示二進位制

thinking in java test4.3練習(1)(2)(3)(4)(5)用三元操作符和按位操作來顯示二進位制

題目(1):寫一個程式,列印從1到100的值。
程式碼如下:

public class Test4_3_1 {
    public static void main(String[] args){
        for (int i = 0; i <= 100; i++) {
            System.out.println(i);
        }
    }
}

這是簡單的迴圈應用,當然除了用for迴圈,我們也可以用while和do…while。如下所示:

        int i = 0;
        while (i <= 100) {
            System.out.println(i++);
        }
int j = 0; do { System.out.println(j++); }while (j<=100);

練習(2)題目:寫一個程式,產生25個int型別的隨機數,對於每一個隨機值,使用if—else語句來將起分類為大於,小於或者等於緊隨著它而隨機生成的值。
程式碼如下:

public class Test4_3_2 {
    public static void main(String[] args) {
        int thisNum ;
        int nextNum = (int
) (Math.random()*1000);//初始化 for (int i = 0; i < 25; i++) { thisNum = nextNum; nextNum = (int) (Math.random() * 1000); if (thisNum > nextNum) { System.out.println("當前數:" + thisNum + "是大於緊隨它而產生的隨機數的"); } else if (thisNum < nextNum) { System.out
.println("當前數:" + thisNum + "是小於隨它而產生的隨機數的"); } else { System.out.println("當前數:" + thisNum + "是等於緊隨它而產生的隨機數的"); } } } }

控制檯輸出如下:
當前數:591是小於隨它而產生的隨機數的
當前數:765是小於隨它而產生的隨機數的
當前數:835是大於緊隨它而產生的隨機數的
當前數:385是小於隨它而產生的隨機數的
當前數:906是小於隨它而產生的隨機數的
當前數:977是大於緊隨它而產生的隨機數的
當前數:850是大於緊隨它而產生的隨機數的
當前數:116是小於隨它而產生的隨機數的
當前數:710是大於緊隨它而產生的隨機數的
當前數:684是大於緊隨它而產生的隨機數的
當前數:137是小於隨它而產生的隨機數的
當前數:254是小於隨它而產生的隨機數的
當前數:954是大於緊隨它而產生的隨機數的
當前數:139是大於緊隨它而產生的隨機數的
當前數:124是小於隨它而產生的隨機數的
當前數:751是大於緊隨它而產生的隨機數的
當前數:523是大於緊隨它而產生的隨機數的
當前數:15是小於隨它而產生的隨機數的
當前數:454是小於隨它而產生的隨機數的
當前數:476是小於隨它而產生的隨機數的
當前數:885是大於緊隨它而產生的隨機數的
當前數:84是小於隨它而產生的隨機數的
當前數:331是小於隨它而產生的隨機數的
當前數:700是大於緊隨它而產生的隨機數的
當前數:113是小於隨它而產生的隨機數的

練習(3)題目:修改練習(2),把程式碼用一個while無限迴圈包括起來。然後執行它直至用鍵盤中斷其執行,通常是通過按Ctlr+C。
題目的意思就是讓我們寫個while死迴圈。
程式碼很簡單,就是將for迴圈語句該成:while(true);
其實用for語句也能寫死迴圈:for( ; ; );如上所示for語句內不寫任何語句,當然不能省略分號,這也是一個死迴圈。

練習(4)題目:寫一個程式,使用兩個巢狀的for迴圈和取餘操作符(%)來探測和列印素數(只能被其自身和1整除,而不能被其他數字整除的整數)。程式碼如下:

public static void main(String[] args) {
        for (int i = 1; i < 1002; i++) {
            int num = 0;
            for (int j = 1; j < (i + 2) / 2; j++) {
                if ((i % j) == 0) {
                    num++;//記錄是否出現能被整除的數
                }
            }
            if (num < 2) {//被1整除計一次
                System.out.println("數字:" + i + "  是素數");
            }
        }
    }

練習(5)題目:重複第三章中的練習10,不要用Integer.toBinaryString()方法,而是用三元操作符和按位操作符來顯示二進位制0和1.
原始碼如下:

 public static void main(String[] args){
        int a = 0xAAAA;
        int b = 0x5555;
        int c;
        c = a & b;
        outCBit(c);
        c = a | b;
        outCBit(c);
        c = ~a;
        outCBit(c);
        c = a ^ b;
        outCBit(c);
    }
    private static void outCBit(int c) {
        int d = 0x8000;
        for (int i = 0; i < 16; i++) {
            int out = (c | d) == c ? 1 : 0;//迴圈比較得出每一位
            System.out.print(out);
            d>>>=1;
        }
        System.out.println();
    }

控制檯輸出為:
0000000000000000
1111111111111111
0101010101010101
1111111111111111

根據題目的要求,用按位和移位運算子顯示二進位制。思路為:
1,輸入一個二進位制為1000 0000 0000 0000的數d
2,d與c進行或運算,因為1|1=1,1|0=1,0|0=0;所以如果c的二進位制從左往右數第一個,(也就是d的二進位制數值為1的相對應位置),為0,則c|d不等於c,(因為d其它位置二進位制值為0,所以對計算結果沒有影響),如果結果為1,則說明c|d==c。根據此,得出c的二進位制值第一個位置是0還是1。用三元運算子複製給out,再在控制檯輸出。
3,對d進行無符號移位操做,d的二進位制值為1的位置右移一位,然後再與c進行或運算,根據運算結果得出c二進位制表示時從左往右第二個值為1還是0,再輸出。
4,接下來不斷重複移位和計算,直到得到所有結果位置。

將以上步驟封裝成一個方法,分別輸出與,或,非,異或四種位操作的結果,與第三章練習10運算結果對比後發現結果完全正確。

以上。