JavaSE:第十七章:編程測試題

**練習:求1+2!+3!+...+20!的和**

    long sum = 0;
    for (int i = 1; i <= 20; i++) {
        long temp= 1;
        for (int j = 1; j <= i; j++) {
            temp *= j;
        }
        sum += temp;
    }
    System.out.println(sum);
結果為:2561327494111820313

**練習:獲取字串中各個的字符數(shù)量**


    public static void main(String[] args) {
            String string = "中國,國國哥,好帥是個大帥,哥哥";
            HashMap<Character, Integer> hashMap = new HashMap<>();
            while(string.length()>0) {
                Character c = string.charAt(0);
                string = string.substring(1);
                Integer integer = hashMap.get(c);
                if(integer == null ) {
                    hashMap.put(c, 1);
                }else {
                    hashMap.put(c, integer + 1);
                }
            }
            Set<Entry<Character, Integer>> entrySet = hashMap.entrySet();
            for (Entry<Character, Integer> entry : entrySet) {
                System.out.println(entry);
            }
    }
結果:

    哥=3
    帥=2
    大=1
    個=1
    ,=3
    中=1
    國=3
    好=1
    是=1
**練習:消除集合中重復的元素**

    public static void main(String[] args) {
            List list = Arrays.asList(1,2,3,3,4,4,5,5,6,1,9,3,25,4);
            HashSet<Integer> hashSet = new HashSet<>();
            hashSet.addAll(list);
            for (Integer integer : hashSet) {
                System.out.println(integer);
            }
    }
結果:

    1
    2
    3
    4
    5
    6
    9
    25
**練習:找出數(shù)組中的一個值,使其左側(cè)值的和等于右側(cè)值的加和,例如:1,2,5,3,2,4,2,結果為第四個值。**
    

    public static void main(String[] args) {
            int[] arr = new int[] {1,2,5,3,2,4,2};//1,2,5,3,2,4,2,9,2,1,7,6,3
            int targetIndex=0;
            for (int i = 0; i < arr.length; i++) {
                int leftSum=0;
                int rightSum=0;
                for (int j = 0; j < targetIndex; j++) {
                    leftSum += arr[j];
                }
                for (int j = targetIndex+1; j < arr.length; j++) {
                    rightSum+=arr[j];
                }
                if(leftSum == rightSum) {
                    break;
                }
                targetIndex++;
            }
            if(targetIndex == arr.length) {
                System.out.println("未找到這樣的數(shù)值");
            }else {
                System.out.println("目標下標:" + targetIndex + "對應的值:" + arr[targetIndex]);
            }
    }
結果為:目標下標:3對應的值:3

**練習:**
請編寫一個 Application
實現(xiàn)如下功能:從控制臺給出的一個字母串,然后判斷該串的第一個字母是否為大寫,若是大寫則統(tǒng)計該串中大寫字母的個數(shù),并將所有大寫字母輸出;否則輸出信息串”第一個字母不是大寫字母!”。

    Scanner scanner = new Scanner(System.in);
    System.out.println("請輸入一個字符串:");
    String string = scanner.next();
    char first = string.charAt(0);
    int intf = (int)first;
    System.out.println("第一個字母大小為:" + intf);
    if(intf >= 65 && intf <= 90) {
        int count = 0;
        for (int i = 0; i < string.length(); i++) {
            char charAt = string.charAt(i);
            int intChar = (int)charAt;
            if(intChar >= 65 && intChar <= 90) {
                count++;
                System.out.print(charAt + " ");
            }
        }
        System.out.println(count);
    }else {
        System.out.println("第一個字母不是大寫字母!");
    }
運行結果:
請輸入一個字符串:

    ABCabcdBC
    第一個字母大小為:65
    A B C B C 5

**練習:**
一個應用程序,接受用戶輸入的一行字符串,統(tǒng)計字符個數(shù),然后反序輸出。        

    Scanner scanner = new Scanner(System.in);
    System.out.println("請輸入字符串:");
    String string = scanner.next();
    String back;
    int index= string.length() - 1;//4-1=3
    char[] charArray = new char[index + 1];
    for (int i = 0; i < string.length(); i++) {
        char charAt = string.charAt(i);
        charArray[index - i] = charAt;
    }             //3  0123
    String string2 = new String(charArray);
    System.out.println("字符個數(shù)為:" + string.length() + "," + string2);

運行結果:

    請輸入字符串:
    sddfgghhj
    字符個數(shù)為:9,jhhggfdds
    
**練習:**
實現(xiàn)這兩個字符串的拼接

    Scanner scanner = new Scanner(System.in);
    System.out.println("請輸入字符串:");
    String next1 = scanner.next();
    System.out.println("請輸入再次輸入字符串:");
    String next2 = scanner.next();
    String concat = next1.concat(next2);
    System.out.println(concat);
運行結果:

    請輸入字符串:
    fdsaf
    請輸入再次輸入字符串:
    dsfaaf
    fdsafdsfaaf

**練習:寫一個冒泡排序**
排序思想:
相鄰兩元素進行比較,如有需要則進行交換,每完成一次循環(huán)就將最大元素排在最后(如從小到大排序),下一次循環(huán)是將其它的數(shù)進行類似操作。

簡單來說:
拿從小到大排序:拿二個數(shù)來比大小,大的數(shù)拿出來,繼續(xù)跟后面的數(shù)比較大小,繼續(xù)拿大的數(shù)出來這樣循環(huán),最后一個數(shù)反正是最大的。下一次循環(huán)操作類似。

案例:
int[] array = {11,5,9,7,3,2};
最開始數(shù)組:11 5 9 7 3 2
11比5大,拿11:5  11 9 7 3 2
11比9大,拿11:5 9 11 7 3 2
11比7大,拿11:5 9 7 11 3 2
...
比完第一輪后:
5 9 7 3 2 11
代碼參考:

    int[] array = {11,5,9,7,3,2};
    for (int i = 1; i < array.length; i++) {
        if(array[i-1] > array[i]) {
            int temp;
            temp = array[i-1];
            array[i-1] = array[i];
            array[i] = temp;
        }
    }
    for (int i = 0; i < array.length; i++) {
        System.out.print(array[i] + " ");
    }

已經(jīng)確定11為最大的數(shù),就不拿11繼續(xù)比較了
現(xiàn)在要比較的數(shù)組:5 9 7 3 2
和第一輪一樣
拿5和9比,9大,拿9:5 9 7 3 2
拿9和7比,9大,拿9:5 7 9 3 2
...
第二輪比較:5,7,3,2,9
第三輪比較:5,3,2,7
第四輪比較:3,2,5
...
我們可以發(fā)現(xiàn)比較的數(shù)的形狀有點像:
。。。。。。
。。。。。
。。。。
。。。
。。
。
實現(xiàn)代碼:

    int[] array = {11,5,9,7,3,2};
    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array.length - i; j++) {                
            System.out.print("。");
        }
        System.out.println();
    }
發(fā)現(xiàn)內(nèi)外循環(huán)可以使用上面的操作了,我們可以繼續(xù)對倆個數(shù)進行換位置操作。之前我們學過二個數(shù)換位置,所以附上代碼:

    if(小的數(shù)變量 > 大的數(shù)變量) {
        int 臨時變量;
        臨時變量= 小的數(shù)變量;
        小的數(shù)變量 = 大的數(shù)變量;
        大的數(shù)變量= 臨時變量;
    }

放到數(shù)組中

    if(array[j-1] > array[j]) {
        int temp;
        temp = array[j-1];
        array[j-1] = array[j];
        array[j] = temp;
    }
最終代碼:

    int[] array = {11,5,9,7,3,2};
    for (int i = 1; i <= array.length; i++) {
        for (int j = 1; j <= array.length - i; j++) {
            if(array[j-1] > array[j]) {
                int temp;
                temp = array[j-1];
                array[j-1] = array[j];
                array[j] = temp;
            }
        }
    }
    for (int i = 0; i < array.length; i++) {
        System.out.print(array[i]);
    }
好了冒泡排序完成