zoukankan      html  css  js  c++  java
  • java编程基础(四)函数与数组

    ---恢复内容开始---

    函数与数组

    一、函数

    1.1 函数的概述

    函数的概念是在日常的使用过程中被提出来的,如果我们在编写程序的过程中发现有一段代码在程序中多次使用,我们可以把这段代码封装成独立的小程序,这段小程序就叫做函数,使用的时候调用它就行了,减小了代码量,提高了代码的复用性。

    1.2 函数的格式

    修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…)

             {

                                执行语句;

                                return 返回值;

             }

    返回值类型: 运行这段程序得出的一个运算结果,结果类型,如果函数没有返回值则用void:来表示该函数没有返回值。

    函数名:仅仅是一个标识符,可以随意起名字。

    形式参数:是一个变量,用于存储调用函数传递进来的实际参数。

    实际参数:传递给形式参数的具体数值。

    返回值:返回给调用者(若函数的返回值类型为void则没有返回值,若定义了返回值类型却没有return返回值或者返回值的数据类型跟定义的返回值的数据类型不同,则程序会报错)。

    定义函数的步骤:

        1:先确定函数的形参列表(看有几个变量参与函数运算)

        2:再看返回值类型,是否有运算结果(返回值)

        3:最后定义运算语句。

    案例:定义一个函数用来获取2个整数中的较大的数。

    1.由案例得该函数由两个变量参与运算,而且数据类型为整型。

    2.较大的数的数据类型为整型,所以返回值类型为整型。

    3.通过if语句来比较,找出最大值

    怎么调用函数:

    使用函数名再跟上要传入的实参列表,如果方法有返回值,可以定义一个变量来接收返回值。

    具体代码如下:

     

    运行结果:

     

    注意:main方法是程序的入口由虚拟机调用,方法和方法之间不能嵌套,方法之间通过调用来使用。

    方法什么时候执行完毕:

    当执行完return语句,或者执行到方法末尾的花括号时方法结束。

    该类中包含了两个方法,main方法和getMax方法。main方法由java虚拟机调用,并且main方法的写法是固定的。Main方法可以调用其他方法。

    当调用getMax方法时,变量i的值传递给方法中的x,j的值传递给方法中的y,并开始执行getMax方法中的语句,执行return,并返回运算结果。getMax方法运行完毕。

    1.3 函数的特点

    1. 定义函数可以将功能代码进行封装

    2.定义函数可以提高代码的复用性。

    3.函数只有被main函数或其他函数调用才能执行。

    4.函数都会返回一定的值,若返回值为空,则函数的返回值类型为void,return语句可省略不写;若返回值不为空,则函数的返回值类型,就是函数的返回值的数据类型。

    5.函数不能嵌套函数,函数与函数是平级的关系,只能调用另一个函数,而非嵌套。

    1.4 函数的应用

    案例1. 画矩形

     

    案例2. 比较两个数是否相等

    注意:

    1. 函数中只能调用函数,不能定义函数,没有定义函数之前,不能调用函数。
    2. 输出语句只能对有具体返回结果的函数的进行打印。
    3. 返回值类型是void的函数,是不可以被输出语句打印的。

    1.5 函数的重载

         函数重载的定义:在一个类中有一个以上的同名函数,他们的参数列表不同(参数的个数或者参数的数据类型不同),我们把这种现象称作函数的重载,函数的重载和返回值类型无关,返回值类型可以相同也可以不同。

         函数重载的意义:为了增强方法的阅读性,优化程序设计。

    案例1: 九九乘法表

     

    二、数组

    2.1 数组的概述

    在前面的学习中,我们学习了一些基本的数据类型和变量,众所周知,变量是一个容器,只能存储一个数据,但我们如果想存储一连串同种类型的数据又该怎么做?这时候数组的概念就诞生了,数组是专门用来存储多个同种数据类型的数据的。其实数组也是一个容器,只不过这个容器的功能比变量要强大多了。

    如果需要存储大量的数据,例如如果需要读取100个数,那么就需要定义100个变量,显然重复写100次代码,是没有太大意义的。如何解决这个问题,Java语言提供了数组(array)的数据结构,是一个容器可以存储相同数据类型的元素,可以将100个数存储到数组中。

    2.2 数组的定义

    格式1:

    元素类型[] 数组名 = new 元素类型[元素个数或数组长度];

    示例:int[] arr = new int[5];

    格式2:

    元素类型[] 数组名 = new 元素类型[]{元素,元素,……};

    int[] arr = new int[]{3,5,1,7};

    int[] arr = {3,5,1,7};

    注意:给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。创建数组之后不能修改数组的大小。可以使用length 属性获取数组的大小。数组的好处就是数组中的每个元素都有从0开始顺序分配的下标,可以通过数组的下标来获取数组中的元素。

    2.3 数组初始化

    格式一:先定义数组的结构再初始化

    示例:int[] arr = new int[5];

          arr[0]=1;

          用户没有初始化的元素,系统默认初始化置0,与变量相对比,变量必须用户自己初始化。

    格式二:边定义数组的结构,边初始化

    示例:int[] arr = new int[]{3,5,1,7};

    int[] arr = {3,5,1,7};

    定义了数组的长度为4,初始化了数组中个元素的值。

    int i = arr.length(); 该语句用于获取数组的长度。

    2.4 数组中常见的异常

    1. 一数组角标越界异常:,注意:数组的角标从0开始。

    public static void main(String[] args) {

           int[] x = { 1, 2, 3 };

           System.out.println(x[3]);

           //java.lang.ArrayIndexOutOfBoundsException

    }

    2. 空指针异常:

    public static void main(String[] args) {

           int[] x = { 1, 2, 3 };

           x = null;

           System.out.println(x[1]);

           // java.lang.NullPointerException

        }

    2.5 数组的内存分析

    案例分析:

    创建数组时,首先会在栈内存中创建名为arr的局部变量,此变量保存的是堆内存中数组元素的首地址,数组运算按下表顺序依次排列,找到了第一个元素,就可以通过地址叠加找到数组中的其他元素。

    用new关键字创建的实体都是保存在堆内存中,然后在栈内存中定义一个局部变量指向它。

    Jvm有垃圾回收机制,当堆内存的实体没有局部变量来指向它,或者调用该实体的程序执行网,jvm就会把这些实体视为垃圾,启动垃圾回收机制回收,这和c语言有很多的区别,c语言是不会自动回收不用的内存空间的。

     

    2.6 数组的常见操作

    操作1 遍历

    遍历需要使用数组的length属性函数来获取数组的长度。

     

    操作2 获取最大值

     

    2.7 数组元素的排序与查找方式

    案例1 直接排序

     

    案例二 冒泡排序

     

    案例3 折半查找(二分法)

    案例4 数组翻转

     

    2.8 二维数组

    二维数组:实质就是存储是一维数组,只不过一维数组里面存储的是另外一些一维数组的地址

    数组定义:

           数组类型[][] 数组名 = new 数组类型[一维数组的个数][每一个一维数组中元素的个数];

     

    疑问: 为什么a.length = 3, a[0].length = 4?

    数组的初始化:

             静态初始化:

                       int [][] a = new int[][]{ {12,34,45,89},{34,56,78,10},{1,3,6,4} };

             动态初始化:

                    

    二维数组常见的操作:

    1. 遍历二维数组
    2. 对二维数组求和

    class Demo3

    {

        // 定义一个遍历二维数组的功能函数

        public static void printArr2( int [][] a ){

           // 1. 拆开二维数组

           for ( int i = 0 ; i < a.length ; i++ )

           {

              // 2. 拆开一维数组获取数据

              for ( int j = 0 ; j < a[i].length ; j++ )

              {

                  System.out.print( a[i][j]+" ," );

              }

           }

       

        }

        // 定义一个函数计算二维数组中的元素的累加和

        public static long getSum( int [][] a ){

           // 0. 定义一个结果变量

            long sum = 0L;

           // 1. 拆开二维数组

           for ( int i = 0 ; i < a.length ; i++ )

           {

              // 2. 拆开一维数组获取数据

              for ( int j = 0 ; j < a[i].length ; j++ )

              {

                  sum+=a[i][j];

              }

           }

           return sum;

        }

       

        // 统计二维数组中元素的个数

        public static int getDataCount( int [][] a ){

           // 0. 记录元素个数

           int  count = 0;

           // 1. 拆开二维数组

           for ( int i = 0 ; i < a.length ; i++ )

           {

              // 2. 拆开一维数组获取数据

              for ( int j = 0 ; j < a[i].length ; j++ )

              {

                  count++;

              }

           }

          return count;

        }

        public static void main(String[] args)

        {

          

           int [][] a = new int[][]{ {23,4,5},{2},{4,5,78,56,90} };

           printArr2( a );

            System.out.println();

           System.out.println("累加和是: "+getSum( a ) );

           System.out.println("统计元素个数: "+getDataCount( a ) );

           System.out.println("Hello World!");

          

          

        }

    }

         

     

    ---恢复内容结束---

  • 相关阅读:
    shell 字符串切分成数组
    RDD关键性能考量之 内存管理
    RDD关键性能考量之 序列化格式
    【转】Linux ln(link) 命令详解
    【转】redis配置认证密码
    【转】MongoDB 知识要点一览
    RDD关键性能考量之 并行度
    使用thumbnailator不按照比例,改变图片的大小
    Linux服务器redhat配置本地yum源
    Oracle表字段的增删改和重命名
  • 原文地址:https://www.cnblogs.com/ithome0222/p/7805642.html
Copyright © 2011-2022 走看看