JavaSE常見問題小結

1.字符串或數字反轉問題

對于數字,我們可以將其轉化成String類型的字符串進行反轉。我們可以使用for循環獲取字符串的每個字符,然后重新構造一個新的字符串,這樣就可以得到反轉后的字符串了。

        Scanner input = new Scanner(System.in);
        System.out.println("請輸入一個字符串:");
        String num = input.next();
        String res = "";
        for (int i=num.length()-1;i>=0;i--) {
            res = res + num.charAt(i);
        }
        System.out.println("反轉的結果為: " + res);

而對于純數字類型,我們還可以采用這樣的方式進行數字反轉:首先對數字進行取余,輸出取余的結果,然后對數字進行取整,作為下一次進入循環的條件。

        Scanner input = new Scanner(System.in);
        System.out.println("請輸入數字:");
        int inputNum = input.nextInt();
        int res;
        while(inputNum != 0) {
            res = inputNum % 10;
            System.out.print(res);
            inputNum /= 10;
        }
2.求數組最大值問題

方法一:初始化數組中的某個元素,但是初始化值不可定義為0,因為如果數組中的值全部為負數時,這樣獲得數組的最大值就為0,不符合事實。

        int max = arr[0];
        for (int i = 0;i < arr.length;i++) {
            max = arr[i] > max ? arr[i] : max;
        }
        System.out.println(max);

方法二:初始化數組元素的下標

        int maxIndex = 0;
        for (int i = 0;i < arr.length;i++) {
            if (arr[i] > arr[maxIndex]) {
                maxIndex = i;
            }
        }
        System.out.println(arr[maxIndex]);
3.冒泡排序問題

對于冒泡排序,它有以下特點:
①比較相鄰的元素,如果第一個比第二個大,就交換它們;
②對每一對相鄰的元素都做同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素會是最大的數;
③針對所有的元素重復以上步驟,除了最后一個;
④持續每次對越來越少的元素重復以上步驟,直至沒有任何一對數字需要進行比較。

        int[] nums = {28,18,79,65,32};
        int temp;
        //控制比較多少輪
        for (int i = 0;i < nums.length - 1;i++) {
            //控制每輪的比較次數
            for (int j = 0;j < nums.length - 1 - i;j++) {
                if (nums[j] >nums[j+1]) {
                    //兩數互換
                    temp = nums[j];
                    nums[j] = nums[j+1];
                    nums[j+1] = temp;
                }
            }
        }
        //迭代輸出排序后的數組
        for (int n : nums) {
            System.out.println(n);
        }
4.插入排序問題

基本思想:對于一個數組,從下表為1即第二個數字開始進行插入,當要插入的值比它前面的值小的時候,把前面的數字替換到當前的下標位置上。

        int[] nums = {23,12,67,21,31};
        //控制輪數,從第二個數字開始(下標為1)
        for(int i = 1; i < nums.length; i++) {
            int j = i;
            int temp = nums[j];//將要插入的值存儲到臨時變量
            //1.當要插入的值比前面的值小的時候進入循環
            //2.通過j>0 短路操作避免出現nums[-1]的情況

            while(j > 0 && temp < nums[j-1]) {
                nums[j] = nums[j-1];//把前一個數字替換到當前位置上
                j--;//修改j變量的值
            }
            nums[j] = temp;//將臨時變量的值賦值給對應的下標
        }

        for (int n : nums) {
            System.out.println(n);
        }
5.選擇排序問題

工作原理:每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。

        int[] nums = {23,32,14,16,78};

        for (int i = 0;i < nums.length - 1;i++) {

            for (int j = i + 1;j < nums.length;j++) {
                if (nums[i] > nums[j]) {
                    int temp = nums[j];
                    nums[j] = nums[i];
                    nums[i] = temp;
                }
            }

        }

        for (int n : nums) {
            System.out.println(n);
        }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。