Java 數(shù)組,遞歸方法

數(shù)組簡介

數(shù)組: 存儲相同類型的一組數(shù)據(jù),數(shù)組也是一種數(shù)據(jù)類型,是引用數(shù)據(jù)類型。

  • 定義格式一

    數(shù)據(jù)類型[] 數(shù)組名 =new 數(shù)據(jù)類型[數(shù)組的長度];如:int[] arr=new int[10];
    

new 是在內(nèi)存中分配空間,空間的大小由數(shù)組的長度和數(shù)據(jù)類型決定,在數(shù)組的內(nèi)存分配完成后,會將內(nèi)存的首地址返回給數(shù)組名,因此數(shù)組名是指向內(nèi)存空間首地址的引用。

  • 定義格式二

    int[] arr={9,1,4,6,9,10};
    

數(shù)組案例

圖解

重點,值傳遞還是引用傳遞

  /***
   * 基本數(shù)據(jù)類型與引用數(shù)據(jù)類型的區(qū)別
   */

  public class Demo {

      //顯示一個數(shù)
      static void show(int a) {
          a += 5;
      }

      static void show(int[] nums) {
          nums[0] += 5;
      }

      public static void main(String[] args) {
          int a = 10;
          show(a);
          System.out.println(a);//10  并不是15
          int[] nums = {9, 5, 2};
          show(nums); //將數(shù)組的首地址傳給了方法中的數(shù)組引用
          System.out.println(nums[0]);//14 并不是9
         //////////////////////////////////
         //字符串的常量對象:  保存在常量池中
         String str = "hihi";
         String str2 = "hihi";
          System.out.println(str == str2);//結(jié)果:true
         show(str);//將str變量的內(nèi)容“hihi”傳給方法
          System.out.println(str);//輸出:hihi
         String str3 = new String("hihi");
         String str4 = str3;
          str3 = "hehe"; //hehe在常量池不存在,則會在常量池中創(chuàng)建對象,str3就指向這個對象
           System.out.println(str4);//輸出: hihi
      }
  }

面試必問,叫你還不點進來

面試必問,叫你還不點進來

面試必問,叫你還不點進來

在Java中,變量分為以下兩類:

  • 對于基本數(shù)據(jù)類型變量(int、long、double、float、byte、boolean、char),Java是傳值的副本。
  • 對于一切對象型變量,Java都是傳引用的副本。其實傳引用副本的實質(zhì)就是復制指向地址的指針(對于對象參數(shù)變量則傳對象的地址)

需要注意的是:String類型也是對象型變量,所以它必然是傳引用副本。String類是final類型的,因此不可以繼承和修改這個類。
不管Java參數(shù)的類型是什么,一律傳遞參數(shù)的副本。

數(shù)據(jù)交換

  /**
   * 數(shù)據(jù)交換
   */
  public class Demo{
      public static void main(String[] args) {
          int a = 10, b = 30;
          System.out.println(a + "," + b);
          swap(a, b);

          int[] nums = {100, 200};
          swap(nums);
      }


      //交換a和b的數(shù)值
      static void swap(int a, int b) {
          /*int c=a;
        a=b;
        b=c;
        */
          a = a + b;
          b = a - b;
          a = a - b;
          System.out.println(a + "," + b);
      }


      //方法參數(shù): 引用類型
      static void swap(int[] nums) {

          swap(nums[0], nums[1]);

          System.out.println(nums[0] + "," + nums[1]); //此時數(shù)組中的數(shù)值不會改變

          int c = nums[0];
          nums[0] = nums[1];
          nums[1] = c;

          System.out.println(nums[0] + "," + nums[1]); //此時,兩個數(shù)值已交換
      }
  }

增強for循環(huán)

格式

      for(數(shù)據(jù)類型 變量名:數(shù)組名){ 循環(huán)體  }

過程: 將數(shù)組中數(shù)從0的位置依次讀取, 不好之處在于在循環(huán)體中無法訪問 當前讀取的索引值。

增強for 循環(huán)舉例

  public class Demo{
      public static void main(String[] args) {
          //動態(tài)生成10個隨機數(shù)(1~100),并讀?。ù蛴。?          int[] nums = new int[10];

          for (int i = 0; i < nums.length; i++) {
              nums[i] = (int) (Math.random() * 100 + 1); //生成1~100之間的隨機數(shù)
          }

          //打印
          for (int n : nums) {
              System.out.print(n + "\t");
          }
      }
  }

二維數(shù)組

定義格式:

    數(shù)據(jù)類型[][] 數(shù)組名 = new 數(shù)據(jù)類型[行大小][列大小];
    數(shù)據(jù)類型[][] 數(shù)組名 =new 數(shù)據(jù)類型[][]{{1,3,2},{2,3,4},{},{0,9,2}}
    數(shù)據(jù)類型[][] 數(shù)組名 ={{1,3,2},{2,3,4},{},{0,9,2}}

二維數(shù)組案例

public class Demo{

    public static void main(String[] args) {
        int[][] scores = new int[][]{{90, 80, 100}, {92, 90, 100}, {91, 95, 96}, {95, 100, 100}, {97, 98, 100}};


        //循環(huán)一維數(shù)組:行
        for (int i = 0; i < scores.length; i++) {

            System.out.print("第 " + (i + 1) + " 人的成績:");

            //循環(huán)二維數(shù)組: 列
            for (int j = 0; j < scores[i].length; j++) {

                if (j != scores[i].length - 1)
                    System.out.print(scores[i][j] + ",");
                else
                    System.out.print(scores[i][j] + "\n");
            }
        }
    }
}

方法補充

遞歸方法

自己調(diào)用自己的方法,遞歸方法要求有兩個點,一是遞歸公式,另一個是遞歸條件。

  • 例子一 遞歸求階乘

            /**
             * 遞歸求階乘
             *
             * @param n
             */
            private static int fun(int n) {
                if (n == 0 || n == 1) {
                    return 1;
                }
                return n * fun(n - 1);
            }
    
  • 例子二 兔子生兔子的問題
    3個月起每個月都生一對兔子,小兔子長到第四個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數(shù)為多少?

        /**
         * 古典兔子
         *
         * @param x
         * @return
         */
        public static int getNums(int x) {
            int nums = 1;
    
            if (x == 1 || x == 2) {
                return nums;
            }
            return getNums(x - 1) + getNums(x - 2);
        }
    

考點

當一個對象被當作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞?(值傳遞還是引用傳遞)

是值傳遞。Java語言的方法調(diào)用只支持參數(shù)的值傳遞。當一個對象實例作為一個參數(shù)被傳遞到方法中時,參數(shù)的值就是對該對象的引用。對象的屬性可以在被調(diào)用過程中被改變,但對對象引用的改變是不會影響到調(diào)用者的。

基本數(shù)據(jù)類型:在方法調(diào)用時,傳遞的參數(shù)是按值的拷貝傳遞
引用對象:在方法調(diào)用時,傳遞的參數(shù)是按引用進行傳遞,其實傳遞的引用的地址,也就是變量所對應的內(nèi)存空間的地址
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,628評論 19 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,740評論 18 399
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,683評論 0 4
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,685評論 1 51
  • 下雨了貓害怕 瑪麗教貓看雨 小貓第一次看雨 跟瑪麗生活在一起很好 想貼的人貼不上 貼上來的人都很煩 疊加的痛苦 負...
    哦沒有了閱讀 182評論 0 0

友情鏈接更多精彩內(nèi)容