java基礎(chǔ)作業(yè)

01奇數(shù)求和練習(xí)

  • A: 奇數(shù)求和練習(xí)
    • a: 題目分析

      • 為了記錄累加和的值,我們需要定義一個(gè)存儲(chǔ)累加和的變量
      • 我們要獲取到1-100范圍內(nèi)的數(shù)
      • 判斷當(dāng)前數(shù)是否為奇數(shù)嗜浮,是奇數(shù),完成累加和操作
      • 累加完畢后捎废,最終顯示下累加和的值
    • b: 解題步驟

      • 定義一個(gè)用來(lái)記錄累加和的變量
      • 使用for循環(huán)語(yǔ)句曹洽,Markdown Preview Enhanced: Toggle Scroll Sync完成1-100之間每個(gè)數(shù)的獲取
      • 使用if條件語(yǔ)句,判斷當(dāng)前數(shù)是否是奇數(shù)蹭沛,是奇數(shù)逆甜,進(jìn)行累加和操作
      • 使用輸出語(yǔ)句,打印累加和變量的值
    • c: 案例代碼

        public class Test01 {
            public static void main(String[] args) {
                int sum = 0;
                for (int i = 0; i < 100; i++) {
                    if (i%2==1) {
                        sum += i;
                    }
                }
                System.out.println("累加和的值 " + sum);
            }
        }
    

02水仙花練習(xí)功能實(shí)現(xiàn)

  • A: 水仙花練習(xí)功能實(shí)現(xiàn)
    • a: 題目分析

      • 明確什么樣的數(shù)就是水仙花數(shù)致板。水仙花數(shù)是指一個(gè)3位數(shù)(100-999之間),其每位數(shù)字立方之和等于該3位數(shù)本身咏窿。
        如153 = 111 + 333 + 555斟或,即 3位數(shù)本身 = 百位數(shù)立方 + 十位數(shù)立方 + 個(gè)位數(shù)立方;
      • 獲取水仙花范圍內(nèi)的所有3位數(shù)(100-999之間的每個(gè)3位數(shù))
      • 判斷該3位數(shù)是否滿足水仙花數(shù),滿足集嵌,打印該3位數(shù)
    • b: 解題步驟

      • 使用for循環(huán)萝挤,得到100-999之間的每個(gè)3位數(shù)
      • 獲取3位數(shù)中百位數(shù)字、十位數(shù)字根欧、個(gè)位數(shù)字
      • 使用if條件語(yǔ)句怜珍,判斷該3位數(shù)是否滿足水仙花數(shù),滿足凤粗,使用輸出語(yǔ)句酥泛,打印該3位數(shù)
    • c: 案例代碼

       public class Test02 {
           public static void main(String[] args) {
               for (int i = 100; i < 1000; i++) {
                   int bai = i/100%10;
                   int shi = i/10%10;
                   int ge = i%10;
                   if (i == bai*bai*bai + shi*shi*shi + ge*ge*ge) {
                       System.out.println(i);
                   }
               }
           }
       }           
    

03ASCII編碼表

  • A: ASCII編碼表
    • a: 英文全稱
      • American Standard Code for Information Interchange,美國(guó)標(biāo)準(zhǔn)信息交換代碼
    • b: ASCII編碼表由來(lái)
      • 計(jì)算機(jī)中嫌拣,所有的數(shù)據(jù)在存儲(chǔ)和運(yùn)算時(shí)都要使用二進(jìn)制數(shù)表示
      • a柔袁、b、c异逐、d這樣的52個(gè)字母(包括大寫(xiě))捶索、以及0、1等數(shù)字還有一些常用的符號(hào), 在計(jì)算機(jī)中存儲(chǔ)時(shí)也要使用二進(jìn)制數(shù)來(lái)表示
      • 具體用哪些二進(jìn)制數(shù)字表示哪個(gè)符號(hào)灰瞻,當(dāng)然每個(gè)人都可以約定自己的一套(這就叫編碼)
      • 大家如果要想互相通信而不造成混亂腥例,那么大家就必須使用相同的編碼規(guī)則,于是美國(guó)有關(guān)的標(biāo)準(zhǔn)化組織就出臺(tái)了ASCII編碼酝润,
        統(tǒng)一規(guī)定了上述常用符號(hào)用哪些二進(jìn)制數(shù)來(lái)表示燎竖。
    • c: 中文編碼表
      • GB2312
      • UNICODE
    • d: 字符中重要的ASCII碼對(duì)應(yīng)關(guān)系
      • a : 97
      • A : 65
      • 0 : 48

04char類型的存儲(chǔ)

  • A: char類型的存儲(chǔ)
    • a: 取值范圍

      • short:占兩個(gè)字節(jié),是有符號(hào)數(shù)據(jù),取值范圍-32768-32767
      • char: 占兩個(gè)字節(jié),是無(wú)符號(hào)數(shù)據(jù),取值范圍0-65536
    • b: 類型轉(zhuǎn)換

      • char類型的數(shù)據(jù)參加運(yùn)算時(shí)要線程程int數(shù)據(jù)類型
    • c: 案例代碼

        /*  ASCII編碼表演示
            字符Java 數(shù)據(jù)類型,char
            整數(shù)Java 數(shù)據(jù)類型,int
            
            int 類型和 char 數(shù)據(jù)類型轉(zhuǎn)換
            char  兩個(gè)字節(jié), int 四個(gè)字節(jié)
            
            char轉(zhuǎn)成int類型的時(shí)候,類型自動(dòng)提示,char數(shù)據(jù)類型,會(huì)查詢編碼表,得到整數(shù)
            int轉(zhuǎn)成char類型的時(shí)候,強(qiáng)制轉(zhuǎn)換,會(huì)查詢編碼表
            
            char存儲(chǔ)漢字,查詢Unicode編碼表
            
            char可以和int計(jì)算,提示為int類型, 內(nèi)存中兩個(gè)字節(jié)
            char取值范圍是0-65535, 無(wú)符號(hào)的數(shù)據(jù)類型
        */
        public class ASCIIDemo{
            public static void main(String[] args){
                char c = 'a';
                int i = c + 1;
                System.out.println(i);
                
                int j = 90;
                char h = (char)j;
                System.out.println(h);
                
                System.out.println( (char)6 );
                
                char k = '你';
                System.out.println(k);
                
                
                char m = -1;
            }
        }   

05輸出所有英文字母

  • A: 輸出所有英文字母
    • a: 題目分析

      • 一共26個(gè)大小寫(xiě)字母,那么袍祖,可以考慮循環(huán)26次底瓣。在每次循環(huán)中,完成指定字母的大小寫(xiě)打印
      • 找出ABCDEFG…XYZ這些字母之間的變化規(guī)律
        通過(guò)ASCII表發(fā)現(xiàn),后面的字母比它前面的字母捐凭,ASCII值大1
        下一個(gè)字母 = 上一個(gè)字母 + 1
        如: A B C D
        65 66 67 68
      • 在每次循環(huán)中打印上一個(gè)字母大小寫(xiě)拨扶,并指定下一個(gè)字母
    • b: 解題步驟

      • 定義初始化大寫(xiě)變量,值為’A’茁肠; 初始化小寫(xiě)變量患民,值為’a’
      • 使用for循環(huán),進(jìn)行26次循環(huán)
      • 在每次循環(huán)中垦梆,打印大寫(xiě)字母匹颤、小寫(xiě)字母。
        每次打印完成后托猩,更新大寫(xiě)字母值印蓖、小寫(xiě)字母值
    • c: 案例代碼

        public class Test04 {
            public static void main(String[] args) {
                char da = 'A';
                char xiao = 'a';
                for (int i = 0; i < 26; i++) {
                    System.out.println("大寫(xiě)字母 "+da+" ,小寫(xiě)字母 "+xiao);
                    da++; //更新大寫(xiě)字母值
                    xiao++; //更新小寫(xiě)字母值
                }
            }
        }
        ```
    

0699乘法表的分析

  • A: 99乘法表的分析
    • a: 打印格式
      11=1
      1
      2=2 22=4
      1
      3=3 23=6 33=9

    • b: 題目分析
      通過(guò)觀察發(fā)現(xiàn),如果把11=1這樣的內(nèi)容 看做一顆的話京腥,那么打印結(jié)果就成了如下效果:

      **




      這樣赦肃,就是打印9行星,每行打印星的個(gè)數(shù)與當(dāng)前行數(shù)相等公浪。
      再觀察“13=3 23=6 33=9”得出它們?nèi)缦碌淖兓?guī)律:
      每行第n次 +"
      "+ 行號(hào) +"="+ 每行第n次 * 行號(hào)
      如: 1 +""+ 2 +"="+ 12; // 相當(dāng)于12=2
      2 +"
      "+ 2 +"="+ 22; // 相當(dāng)于22=4

    • c: 解題步驟

      • 定義一個(gè)外層for循環(huán)他宛,初始值從1開(kāi)始,循環(huán)9次欠气。用來(lái)控制打印的行數(shù)
      • 在外層for循環(huán)內(nèi)部厅各,定義一個(gè)for循環(huán),初始值從1開(kāi)始预柒,循環(huán)次數(shù)與當(dāng)前行數(shù)相等队塘。用來(lái)完成每行打印指定次數(shù)的乘法公式 如1*1=1
      • 在內(nèi)層for循環(huán)中猖凛,完成每行指定次數(shù)的乘法公式打印 如11=1
        System.out.print(k +"
        "+ j +"="+ j*k +"\t");
        // 變量k代表:每行中的第n次
        // 變量j代表:行號(hào)
      • 在外循環(huán)中晃洒,當(dāng)每行指定次數(shù)的乘法公式打印完畢后,通過(guò)System.out.println()切換到下一行亏栈。
        這樣顾翼,再次打印乘法公式時(shí)投放,就在下一行輸出打印了

0799乘法表的功能實(shí)現(xiàn)

  • A: 99乘法表的功能實(shí)現(xiàn)
    • a: 案例代碼
        /*
            利用嵌套for循環(huán),實(shí)現(xiàn)99乘法表示
            實(shí)現(xiàn)步驟:
              1. 定義外循環(huán)控制行數(shù)
              2. 內(nèi)循環(huán)控制個(gè)數(shù),個(gè)數(shù),每次都在遞增
              3. 循環(huán)中輸出,乘法表的格式   1*3=3
        */
        
        public class Test05 {
            public static void main(String[] args) {
                for (int j = 1; j < 10; j++) {
                    for (int k = 1; k <= j; k++) {
                        System.out.print(k +"*"+ j +"="+ j*k +"\t");
                    }
                    System.out.println();
                }
            }
        }
    
        ```
    
    
    
    

08實(shí)現(xiàn)數(shù)組的遍歷

  • A: 實(shí)現(xiàn)數(shù)組的遍歷
    • a: 題目分析

      • 通過(guò)循環(huán),我們可以完成數(shù)組中元素的獲取适贸,數(shù)組名[索引]
      • 觀察發(fā)現(xiàn)灸芳,每個(gè)數(shù)組元素之間加入了一個(gè)逗號(hào)”,”進(jìn)行分隔;并且拜姿,整個(gè)數(shù)組的前后有一對(duì)中括號(hào)”[]”包裹數(shù)組所有元素烙样。
    • b: 解題步驟

      • 使用輸出語(yǔ)句完成打印 左邊的中括號(hào)”[”
      • 使用循環(huán),輸出數(shù)組元素值蕊肥。輸出元素值分為兩種情況谒获,如下:
        • 最后一個(gè)數(shù)組元素蛤肌,加上一個(gè)右邊的中括號(hào)”]”
        • 非最后一個(gè)數(shù)組元素,加上一個(gè)逗號(hào)”,”
    • c: 案例代碼

            /*
                定義方法,實(shí)現(xiàn)數(shù)組的遍歷
                遍歷中,輸出結(jié)果  [11,33,565,66,78,89]
                int[] arr = {3,4,45,7};
                結(jié)果包含字符串, [  ]  ,
                實(shí)現(xiàn)步驟:
                  1. 定義方法實(shí)現(xiàn)數(shù)組的遍歷
                  2. 先打印[ 中括號(hào)
                  3. 遍歷數(shù)組
                    輸出數(shù)組的元素和逗號(hào)
                    判斷是否遍歷到了數(shù)組的最后一個(gè)元素,如果是最后一個(gè)元素,輸出]中括號(hào)
            */
            public class ArrayMethodTest{
                public static void main(String[] args){
                    int[] arr = {11,44,55,33,66};
                    printArray(arr);
                    
                    int[] arr2 = {22,88,99,33,66};
                    printArray(arr2);
                    
                }
                /*
                   定義方法,實(shí)現(xiàn)功能
                   返回值: void
                   方法參數(shù): 數(shù)組
                */
                public static void printArray(int[] arr){
                    //輸出一半中括號(hào),不要換行打印
                    System.out.print("[");
                    //數(shù)組進(jìn)行遍歷
                    for(int i = 0 ; i < arr.length ; i++){
                        //判斷遍歷到的元素,是不是數(shù)組的最后一個(gè)元素
                        //如何判斷 循環(huán)變量 到達(dá) length-1
                        if( i == arr.length-1 ){
                            //輸出數(shù)組的元素和]
                            System.out.print(arr[i]+"]");
                        }else{
                        //不是數(shù)組的最后一個(gè)元素,輸出數(shù)組元素和逗號(hào)
                            System.out.print(arr[i]+",");
                        }
                    }
                    System.out.println();
                }
            }
        ```
    
    

09數(shù)組逆序原理

  • A: 數(shù)組逆序原理

  • a: 題目分析(圖解見(jiàn)day07_source/數(shù)組的逆序原理.JPG)

    • 通過(guò)觀察發(fā)現(xiàn)批狱,本題目要實(shí)現(xiàn)原數(shù)組元素倒序存放操作裸准。即原數(shù)組存儲(chǔ)元素為{11,22,33,44},
      逆序后為原數(shù)組存儲(chǔ)元素變?yōu)閧44,33,22,11}赔硫。
    • 通過(guò)圖解發(fā)現(xiàn)炒俱,想完成數(shù)組元素逆序,其實(shí)就是把數(shù)組中索引為start與end的元素進(jìn)行互換爪膊。
    • 每次互換后权悟,start索引位置后移,end索引位置前移推盛,再進(jìn)行互換
    • 直到start位置超越了end位置峦阁,互換結(jié)束,此時(shí)耘成,數(shù)組元素逆序完成拇派。
  • b: 解題步驟

    • 定義兩個(gè)索引變量start值為0,變量end值為數(shù)組長(zhǎng)度減去1(即數(shù)組最后一個(gè)元素索引)
    • 使用循環(huán)凿跳,完成數(shù)組索引start位置元素與end位置元素值互換。
    • 在循環(huán)換過(guò)程中疮方,每次互換結(jié)束后控嗜,start位置后移1,end位置前移1
    • 在循環(huán)換過(guò)程中骡显,最先判斷start位置是否超越了end位置疆栏,若已超越,則跳出循環(huán)

10數(shù)組逆序功能實(shí)現(xiàn)

  • A:案例代碼
        /*
           數(shù)組的逆序:
             數(shù)組中的元素,進(jìn)行位置上的交換
             逆序 不等于 反向遍歷
             就是數(shù)組中最遠(yuǎn)的兩個(gè)索引,進(jìn)行位置交換,實(shí)現(xiàn)數(shù)組的逆序
             使用的是數(shù)組的指針?biāo)枷?就是變量,思想,可以隨時(shí)變換索引
             反轉(zhuǎn) reverse
             實(shí)現(xiàn)步驟:
               1. 定義方法,實(shí)現(xiàn)數(shù)組的逆序
               2. 遍歷數(shù)組
                 實(shí)現(xiàn)數(shù)組的最遠(yuǎn)索引換位置
                 使用臨時(shí)的第三方變量
        */
        public class ArrayMethodTest_1{
            public static void main(String[] args){
                int[] arr = {3,5,7,1,0,9,-2};
                //調(diào)用數(shù)組的逆序方法
                reverse(arr);
                //看到數(shù)組的元素,遍歷
                printArray(arr);
            }
            
            /*
               定義方法,實(shí)現(xiàn)數(shù)組的逆序
               返回值: 沒(méi)有返回值
               參數(shù):   數(shù)組就是參數(shù)
            */
            public static void reverse(int[] arr){
                //利用循環(huán),實(shí)現(xiàn)數(shù)組遍歷,遍歷過(guò)程中,最遠(yuǎn)端換位
                //for的第一項(xiàng),定義2個(gè)變量, 最后,兩個(gè)變量++ --
                for( int min = 0 , max = arr.length-1 ; min < max  ; min++,max--){
                    //對(duì)數(shù)組中的元素,進(jìn)行位置交換
                    //min索引和max索引的元素交換
                    //定義變量,保存min索引
                    int temp = arr[min];
                    //max索引上的元素,賦值給min索引
                    arr[min] =  arr[max];
                    //臨時(shí)變量,保存的數(shù)據(jù),賦值到max索引上
                    arr[max] = temp;
                }
            }
        }

11選擇排序原理

  • A: 選擇排序原理
    • a: 題目分析(圖解見(jiàn)day07_source/選擇排序原理.JPG)
      • 通過(guò)觀察發(fā)現(xiàn)惫谤,本題目要實(shí)現(xiàn)把數(shù)組元素{13,46,22,65,3}進(jìn)行排序
      • 提到數(shù)組排序壁顶,就要進(jìn)行元素值大小的比較,通過(guò)上圖發(fā)現(xiàn)溜歪,我們想完成排序要經(jīng)過(guò)若干次的比較才能夠完成若专。
      • 上圖中用每圈要比較的第一個(gè)元素與該元素后面的數(shù)組元素依次比較到數(shù)組的最后一個(gè)元素,把小的值放在第一個(gè)數(shù)組元素中蝴猪,數(shù)組循環(huán)一圈后调衰,則把最小元素值互換到了第一個(gè)元素中。
      • 數(shù)組再循環(huán)一圈后自阱,把第二小的元素值互換到了第二個(gè)元素中嚎莉。按照這種方式,數(shù)組循環(huán)多圈以后沛豌,就完成了數(shù)組元素的排序趋箩。這種排序方式我們稱為選擇排序。
* b: 解題步驟
    * 使用for循環(huán)(外層循環(huán)),指定數(shù)組要循環(huán)的圈數(shù)(通過(guò)圖解可知叫确,數(shù)組循環(huán)的圈數(shù)為數(shù)組長(zhǎng)度 - 1)
    * 在每一圈中跳芳,通過(guò)for循環(huán)(內(nèi)層循環(huán))完成數(shù)組要比較的第一個(gè)元素與該元素后面的數(shù)組元素依次比較到數(shù)組的最后一個(gè)元素,把小的值放在第一個(gè)數(shù)組元素中
    * 在每一圈中启妹,要參與比較的第一個(gè)元素由第幾圈循環(huán)來(lái)決定筛严。如上圖所示
        * 進(jìn)行第一圈元素比較時(shí),要比較的第一個(gè)元素為數(shù)組第一個(gè)元素饶米,即索引為0的元素
        * 進(jìn)行第二圈元素比較時(shí)桨啃,要比較的第一個(gè)元素為數(shù)組第二個(gè)元素,即索引為1的元素
        * 依次類推檬输,得出結(jié)論:進(jìn)行第n圈元素比較時(shí)照瘾,要比較的第一個(gè)元素為數(shù)組第n個(gè)元素,即數(shù)組索引為n-1的元素

12選擇排序功能實(shí)現(xiàn)

A: 案例代碼

        /*
          數(shù)組的排序: 一般都是升序排列,元素,小到大的排列
          
          兩種排序的方式
             選擇排序: 數(shù)組的每個(gè)元素都進(jìn)行比較
             冒泡排序: 數(shù)組中相鄰元素進(jìn)行比較
             規(guī)則: 比較大小,位置交換
        */
        public class ArrayMethodTest_2{
            public static void main(String[] args){
                int[] arr  = {3,1,4,2,56,7,0};
                //調(diào)用選擇排序方法
                //selectSort(arr);
                printArray(arr);
            }
            /*
                定義方法,實(shí)現(xiàn)數(shù)組的選擇排序
                返回值: 沒(méi)有
                參數(shù):  數(shù)組
                實(shí)現(xiàn)步驟:
                  1.嵌套循環(huán)實(shí)現(xiàn)排序
                    外循環(huán),控制的是一共比較了多少次
                    內(nèi)循環(huán),控制的是每次比較了多少個(gè)元素
                  2. 判斷元素的大小值
                    小值,存儲(chǔ)到小的索引
            */
            public static void selectSort(int[] arr){
                for(int i = 0 ; i < arr.length - 1; i++){
                    //內(nèi)循環(huán),是每次都在減少,修改變量的定義
                    for(int j = i+1 ; j < arr.length ; j++){
                        //數(shù)組的元素進(jìn)行判斷
                        if(arr[i] > arr[j]){
                            //數(shù)組的換位
                            int temp = arr[i];
                            arr[i] = arr[j];
                            arr[j] = temp; 
                        }
                    }
                }
            }
            
            /*
               定義方法,實(shí)現(xiàn)功能
               返回值: void
               方法參數(shù): 數(shù)組
            */
            public static void printArray(int[] arr){
                //輸出一半中括號(hào),不要換行打印
                System.out.print("[");
                //數(shù)組進(jìn)行遍歷
                for(int i = 0 ; i < arr.length ; i++){
                    //判斷遍歷到的元素,是不是數(shù)組的最后一個(gè)元素
                    //如何判斷 循環(huán)變量 到達(dá) length-1
                    if( i == arr.length-1 ){
                        //輸出數(shù)組的元素和]
                        System.out.print(arr[i]+"]");
                    }else{
                    //不是數(shù)組的最后一個(gè)元素,輸出數(shù)組元素和逗號(hào)
                        System.out.print(arr[i]+",");
                    }
                }
                System.out.println();
            }
        }

13冒泡排序功能實(shí)現(xiàn)

  • A: 冒泡排序功能實(shí)現(xiàn)
    * a: 題目分析
    * 通過(guò)觀察發(fā)現(xiàn)丧慈,本題目要實(shí)現(xiàn)把數(shù)組元素{13,46,22,65,3}進(jìn)行排序
    * 提到數(shù)組排序析命,就要進(jìn)行元素值大小的比較,通過(guò)上圖發(fā)現(xiàn)逃默,我們想完成排序要經(jīng)過(guò)若干次的比較才能夠完成鹃愤。
    * 上圖中相鄰的元素值依次比較,把大的值放后面的元素中完域,數(shù)組循環(huán)一圈后软吐,則把最大元素值互換到了最后一個(gè)元素中。
    數(shù)組再循環(huán)一圈后吟税,把第二大的元素值互換到了倒數(shù)第二個(gè)元素中凹耙。按照這種方式,數(shù)組循環(huán)多圈以后肠仪,
    就完成了數(shù)組元素的排序肖抱。這種排序方式我們稱為冒泡排序。

  • b: 解題步驟
    * 使用for循環(huán)(外層循環(huán))异旧,指定數(shù)組要循環(huán)的圈數(shù)(通過(guò)圖解可知意述,數(shù)組循環(huán)的圈數(shù)為數(shù)組長(zhǎng)度 - 1)
    * 在每一圈中,通過(guò)for循環(huán)(內(nèi)層循環(huán))完成相鄰的元素值依次比較吮蛹,把大的值放后面的元素中
    * 每圈內(nèi)層循環(huán)的次數(shù)欲险,由第幾圈循環(huán)來(lái)決定。如上圖所示
    * 進(jìn)行第一圈元素比較時(shí)匹涮,內(nèi)層循環(huán)次數(shù)為數(shù)組長(zhǎng)度 - 1
    * 進(jìn)行第二圈元素比較時(shí)天试,內(nèi)層循環(huán)次數(shù)為數(shù)組長(zhǎng)度 - 2
    * 依次類推,得出結(jié)論:進(jìn)行第n圈元素比較時(shí)然低,內(nèi)層循環(huán)次數(shù)為數(shù)組長(zhǎng)度 - n

  • c: 案例代碼

                /*
                  數(shù)組的排序: 一般都是升序排列,元素,小到大的排列
                                  兩種排序的方式
                     選擇排序: 數(shù)組的每個(gè)元素都進(jìn)行比較
                     冒泡排序: 數(shù)組中相鄰元素進(jìn)行比較
                     規(guī)則: 比較大小,位置交換
                */
                public class ArrayMethodTest_2{
                    public static void main(String[] args){
                        int[] arr  = {3,1,4,2,56,7,0};
                        //調(diào)用選擇排序方法
                        //selectSort(arr);
                                            //調(diào)用冒泡排序方法
                        bubbleSort(arr);
                        printArray(arr);
                    }
                    /*
                       定義方法,實(shí)現(xiàn)數(shù)組的冒泡排序
                       返回值: 沒(méi)有
                        參數(shù):  數(shù)組
                    */
                    public static void bubbleSort(int[] arr){
                        for(int i = 0 ; i < arr.length - 1; i++){
                            //每次內(nèi)循環(huán)的比較,從0索引開(kāi)始, 每次都在遞減
                            for(int j = 0 ; j < arr.length-i-1; j++){
                                //比較的索引,是j和j+1
                                if(arr[j] > arr[j+1]){
                                    int temp = arr[j];
                                    arr[j] = arr[j+1];
                                    arr[j+1] = temp;
                                }
                            }
                        }
                    }
                    
                    /*
                       定義方法,實(shí)現(xiàn)功能
                       返回值: void
                       方法參數(shù): 數(shù)組
                    */
                    public static void printArray(int[] arr){
                        //輸出一半中括號(hào),不要換行打印
                        System.out.print("[");
                        //數(shù)組進(jìn)行遍歷
                        for(int i = 0 ; i < arr.length ; i++){
                            //判斷遍歷到的元素,是不是數(shù)組的最后一個(gè)元素
                            //如何判斷 循環(huán)變量 到達(dá) length-1
                            if( i == arr.length-1 ){
                                //輸出數(shù)組的元素和]
                                System.out.print(arr[i]+"]");
                            }else{
                            //不是數(shù)組的最后一個(gè)元素,輸出數(shù)組元素和逗號(hào)
                                System.out.print(arr[i]+",");
                            }
                        }
                        System.out.println();
                    }
                }
    

14數(shù)組的折半查找原理

  • A: 數(shù)組的折半查找原理(圖解見(jiàn)day07_source/折半查找原理.JPG)

  • a: 題目分析

    • 通過(guò)觀察發(fā)現(xiàn)喜每,本題目要實(shí)現(xiàn)查找指定數(shù)值在元素有序的數(shù)組中存儲(chǔ)的位置(索引)务唐,返回該位置(索引)。
    • 我們使用數(shù)組最中間位置的元素值與要查找的指定數(shù)值進(jìn)行比較带兜,若相等枫笛,返回中間元素值的索引
    • 最中間位置的元素值與要查找的指定數(shù)值進(jìn)行比較,若不相等刚照,則根據(jù)比較的結(jié)果刑巧,縮小查詢范圍為上次數(shù)組查詢范圍的一半;
      再根據(jù)新的查詢范圍无畔,更新最中間元素位置啊楚,然后使用中間元素值與要查找的指定數(shù)值進(jìn)行比較
      ? 比較結(jié)果相等,返回中間元素值的索引
      ? 比較結(jié)果不相等浑彰,繼續(xù)縮小查詢范圍為上次數(shù)組查詢范圍的一半恭理,更新最中間元素位置,繼續(xù)比較郭变,依次類推颜价。
    • 當(dāng)查詢范圍縮小到小于0個(gè)元素時(shí),則指定數(shù)值沒(méi)有查詢到诉濒,返回索引值-1周伦。
  • b: 解題步驟

  • 定義3個(gè)用來(lái)記錄索引值的變量,變量min記錄當(dāng)前范圍最小索引值未荒,初始值為0横辆;變量max記錄當(dāng)前范圍最大索引值,初始值為數(shù)組長(zhǎng)度-1茄猫;變量mid記錄當(dāng)前當(dāng)前范圍最中間元素的索引值,初始值為(min+max) / 2

  • 使用循環(huán)困肩,判斷當(dāng)前范圍下划纽,最中間元素值與指定查找的數(shù)值是否相等
    ? 若相等,結(jié)束循環(huán)锌畸,返回當(dāng)前范圍最中間元素的索引值mid
    ? 若不相等勇劣,根據(jù)比較結(jié)果,縮小查詢范圍為上一次查詢范圍的一般
    ? 中間元素值 比 要查詢的數(shù)值大潭枣,說(shuō)明要查詢的數(shù)值在當(dāng)前范圍的最小索引位置與中間索引位置之間比默,此時(shí),更新查詢范圍為:
    范圍最大索引值 = 上一次中間索引位置 -1盆犁;
    ? 中間元素值 比 要查詢的數(shù)值小命咐,說(shuō)明要查詢的數(shù)值在當(dāng)前范圍的最大索引位置與中間索引位置之間,此時(shí)谐岁,更新查詢范圍為:
    范圍最小索引值 = 上一次中間索引位置 +1醋奠;
    ? 在新的查詢范圍中榛臼,更新中間元素值的位置,再次使用最中間元素值與指定查找的數(shù)值是否相等窜司。
    中間索引值 = (范圍最小索引值 +范圍最大索引值) / 2;

  • 每次查詢范圍縮小一半后沛善,使用if語(yǔ)句判斷,查詢范圍是否小于0個(gè)元素塞祈,若小于0個(gè)元素金刁,則說(shuō)明指定數(shù)值沒(méi)有查詢到,返回索引值-1议薪。

15數(shù)組的折半查找代碼實(shí)現(xiàn)

  • A: 案例代碼
        /*
           數(shù)組的查找功能
             在一個(gè)數(shù)組中,找一個(gè)元素,是否存在于數(shù)組中,如果存在,就返回索引
             
             普通查詢:
               找到元素在數(shù)組中出現(xiàn)的索引,如果沒(méi)有這個(gè) 元素,結(jié)果就是負(fù)數(shù)
                
        */
        public class ArrayMethodTest_3{
             public static void main(String[] args){
                 int[] arr = {1,3,5,7,9,11,15};
                 int index = binarySearch(arr,10);
                 System.out.println(index);
                 
             }
             
             /*
                 定義方法,實(shí)現(xiàn),折半查找
                 返回值: 索引
                 參數(shù): 數(shù)組,被找的元素 
                 實(shí)現(xiàn)步驟:
                   1. 需要的變量定義
                      三個(gè),三個(gè)指針
                      
                   2. 進(jìn)行循環(huán)折半
                      可以折半的條件  min <= max
                   
                   3. 讓被找元素,和中間索引元素進(jìn)行比較
                       元素 > 中間索引  小指針= 中間+1
                       元素 < 中間索引  大指針= 中間-1
                       元素 == 中間索引  找到了,結(jié)束了,返回中間索引
                       
                    4. 循環(huán)結(jié)束,無(wú)法折半
                      元素沒(méi)有找到 ,返回-1
             */
             public static int binarySearch(int[] arr, int key){
                 //定義三個(gè)指針變量
                 int min = 0 ;
                 int max = arr.length -1 ;
                 int mid = 0;
                 //循環(huán)折半,條件 min<=max
                 while( min <= max){
                     //公式,計(jì)算中間索引
                     mid = (min+max)/2;
                     //讓被找元素,和中間索引元素進(jìn)行比較
                     if(key > arr[mid]){
                         min = mid + 1;
                     }else if (key < arr[mid]){
                         max = mid - 1;
                     }else{
                         //找到元素,返回元素索引
                         return mid;
                     }
                 }
                 return -1;
             }
             
            /*
               定義方法,實(shí)現(xiàn)數(shù)組的普通查詢
               返回值: 索引
               參數(shù):   數(shù)組, 被找的元素
               
               實(shí)現(xiàn)步驟:
                 1. 遍歷數(shù)組
                 2. 遍歷過(guò)程中,使用元素和數(shù)組中的元素進(jìn)行比較
                    如果相同,返回元素在數(shù)組中的索引
                    如果不同,返回負(fù)數(shù)
            */
            public static int search(int[] arr, int key){
                //遍歷數(shù)組
                for(int i = 0 ; i < arr.length ; i++){
                    //數(shù)組元素,被查找的元素比較
                    if(arr[i] == key){
                        //返回索引
                        return i;
                    }
                }
                return -1;
            }
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尤蛮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子笙蒙,更是在濱河造成了極大的恐慌抵屿,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捅位,死亡現(xiàn)場(chǎng)離奇詭異轧葛,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)艇搀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)尿扯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人焰雕,你說(shuō)我怎么就攤上這事衷笋。” “怎么了矩屁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵辟宗,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吝秕,道長(zhǎng)泊脐,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任烁峭,我火速辦了婚禮容客,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘约郁。我一直安慰自己缩挑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布鬓梅。 她就那樣靜靜地躺著供置,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绽快。 梳的紋絲不亂的頭發(fā)上士袄,一...
    開(kāi)封第一講書(shū)人閱讀 51,698評(píng)論 1 305
  • 那天悲关,我揣著相機(jī)與錄音,去河邊找鬼娄柳。 笑死寓辱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赤拒。 我是一名探鬼主播秫筏,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼挎挖!你這毒婦竟也來(lái)了这敬?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蕉朵,失蹤者是張志新(化名)和其女友劉穎崔涂,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體始衅,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冷蚂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汛闸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝙茶。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诸老,靈堂內(nèi)的尸體忽然破棺而出隆夯,到底是詐尸還是另有隱情,我是刑警寧澤别伏,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布蹄衷,位于F島的核電站,受9級(jí)特大地震影響厘肮,放射性物質(zhì)發(fā)生泄漏愧口。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一轴脐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抡砂,春花似錦大咱、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至丑搔,卻和暖如春厦瓢,著一層夾襖步出監(jiān)牢的瞬間提揍,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工煮仇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留劳跃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓浙垫,卻偏偏與公主長(zhǎng)得像刨仑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夹姥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法杉武,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法辙售,繼承相關(guān)的語(yǔ)法轻抱,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,639評(píng)論 18 399
  • 總結(jié)一下常見(jiàn)的排序算法旦部。 排序分內(nèi)排序和外排序祈搜。內(nèi)排序:指在排序期間數(shù)據(jù)對(duì)象全部存放在內(nèi)存的排序。外排序:指在排序...
    jiangliang閱讀 1,346評(píng)論 0 1
  • Win7下如何打開(kāi)DOS控制臺(tái)志鹃? a:開(kāi)始--所有程序--附件--命令提示符 b:開(kāi)始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,599評(píng)論 4 12
  • 禪夭问,佛之心法。所謂直指人心曹铃,見(jiàn)性成佛缰趋。禪師開(kāi)悟,妙趣橫生陕见,或于戲笑怒罵之間秘血,或于揚(yáng)眉瞬目之際,水邊林下评甜,撮空指月灰粮,...
    天下學(xué)問(wèn)夜航船閱讀 555評(píng)論 0 2
  • 今晚讀完了曹文軒教授的《青銅葵花》,那種美好的感覺(jué)久久在五臟六腑間彌漫忍坷、升騰粘舟,就像這穿過(guò)三伏天層層熱浪悄悄而...
    幸運(yùn)草的天空閱讀 349評(píng)論 2 4