Java 数组,递归方法

数组简介

数组: 存储相同类型的一组数据,数组也是一种数据类型,是引用数据类型。

  • 定义格式一

    数据类型[] 数组名 =new 数据类型[数组的长度];如:int[] arr=new int[10];
    

new 是在内存中分配空间,空间的大小由数组的长度和数据类型决定,在数组的内存分配完成后,会将内存的首地址返回给数组名,因此数组名是指向内存空间首地址的引用。

  • 定义格式二

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

数组案例

图解

重点,值传递还是引用传递

  /***
   * 基本数据类型与引用数据类型的区别
   */

  public class Demo {

      //显示一个数
      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); //将数组的首地址传给了方法中的数组引用
          System.out.println(nums[0]);//14 并不是9
         //////////////////////////////////
         //字符串的常量对象:  保存在常量池中
         String str = "hihi";
         String str2 = "hihi";
          System.out.println(str == str2);//结果:true
         show(str);//将str变量的内容“hihi”传给方法
          System.out.println(str);//输出:hihi
         String str3 = new String("hihi");
         String str4 = str3;
          str3 = "hehe"; //hehe在常量池不存在,则会在常量池中创建对象,str3就指向这个对象
           System.out.println(str4);//输出: hihi
      }
  }

面试必问,叫你还不点进来

面试必问,叫你还不点进来

面试必问,叫你还不点进来

在Java中,变量分为以下两类:

  • 对于基本数据类型变量(int、long、double、float、byte、boolean、char),Java是传值的副本。
  • 对于一切对象型变量,Java都是传引用的副本。其实传引用副本的实质就是复制指向地址的指针(对于对象参数变量则传对象的地址)

需要注意的是:String类型也是对象型变量,所以它必然是传引用副本。String类是final类型的,因此不可以继承和修改这个类。
不管Java参数的类型是什么,一律传递参数的副本。

数据交换

  /**
   * 数据交换
   */
  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的数值
      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);
      }


      //方法参数: 引用类型
      static void swap(int[] nums) {

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

          System.out.println(nums[0] + "," + nums[1]); //此时数组中的数值不会改变

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

          System.out.println(nums[0] + "," + nums[1]); //此时,两个数值已交换
      }
  }

增强for循环

格式

      for(数据类型 变量名:数组名){ 循环体  }

过程: 将数组中数从0的位置依次读取, 不好之处在于在循环体中无法访问 当前读取的索引值。

增强for 循环举例

  public class Demo{
      public static void main(String[] args) {
          //动态生成10个随机数(1~100),并读取(打印)
          int[] nums = new int[10];

          for (int i = 0; i < nums.length; i++) {
              nums[i] = (int) (Math.random() * 100 + 1); //生成1~100之间的随机数
          }

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

二维数组

定义格式:

    数据类型[][] 数组名 = new 数据类型[行大小][列大小];
    数据类型[][] 数组名 =new 数据类型[][]{{1,3,2},{2,3,4},{},{0,9,2}}
    数据类型[][] 数组名 ={{1,3,2},{2,3,4},{},{0,9,2}}

二维数组案例

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}};


        //循环一维数组:行
        for (int i = 0; i < scores.length; i++) {

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

            //循环二维数组: 列
            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");
            }
        }
    }
}

方法补充

递归方法

自己调用自己的方法,递归方法要求有两个点,一是递归公式,另一个是递归条件。

  • 例子一 递归求阶乘

            /**
             * 递归求阶乘
             *
             * @param n
             */
            private static int fun(int n) {
                if (n == 0 || n == 1) {
                    return 1;
                }
                return n * fun(n - 1);
            }
    
  • 例子二 兔子生兔子的问题
    3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

        /**
         * 古典兔子
         *
         * @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);
        }
    

考点

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?(值传递还是引用传递)

是值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。

基本数据类型:在方法调用时,传递的参数是按值的拷贝传递
引用对象:在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,875评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,569评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,475评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,459评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,537评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,563评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,580评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,326评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,773评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,086评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,252评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,921评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,566评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,190评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,435评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,129评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,125评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,612评论 18 399
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,231评论 0 4
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,514评论 1 51
  • 下雨了猫害怕 玛丽教猫看雨 小猫第一次看雨 跟玛丽生活在一起很好 想贴的人贴不上 贴上来的人都很烦 叠加的痛苦 负...
    哦没有了阅读 135评论 0 0