java数组函数_java编程基础(四)函数与数组

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

函数与数组

一、函数

1.1 函数的概述

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

1.2 函数的格式

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

{

执行语句;

return 返回值;

}

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

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

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

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

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

定义函数的步骤:

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

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

3:最后定义运算语句。

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

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

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

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

怎么调用函数:

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

具体代码如下:

15fdc9075ca946c22fdbcf0408333a7d.png

运行结果:

cf7baf92d57d98d10ecba9f9fc5fa116.png

注意: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. 画矩形

67537261664db2140dcf90a1250c6c25.png

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

a53867d317d5b8f60f67dcd62e5f7065.png

注意:

函数中只能调用函数,不能定义函数,没有定义函数之前,不能调用函数。

输出语句只能对有具体返回结果的函数的进行打印。

返回值类型是void的函数,是不可以被输出语句打印的。

1.5 函数的重载

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

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

案例1: 九九乘法表

49b4a685bb705b7fc92f25b0de78b519.png

二、数组

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语言是不会自动回收不用的内存空间的。

5ff3b1fa9f658a37b7685628b7eaafbb.png

2.6 数组的常见操作

操作1遍历

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

c055443d47f8f709c279bc7223748eae.png

操作2获取最大值

165a01a84b4e941b6cb56966586c9553.png

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

案例1 直接排序

ca7c015be0e854ea72845b957cf91e5d.png

案例二 冒泡排序

f8e59231feed2b42830bd4e5efb8494d.png

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

5e826adf6351ff8984fd05e9736943c2.png

案例4 数组翻转

a80ebcc4741912e62efe3b0a69f14943.png

2.8 二维数组

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

数组定义:

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

3dd63a061abd92a4363ccec33d42aeff.png

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

046fc8276c8f8a88c0533f504c1b594c.png

数组的初始化:

静态初始化:

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

动态初始化:

a09c411e1605410d4d852ddaa8f5915e.png

二维数组常见的操作:

遍历二维数组

对二维数组求和

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!");

}

}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值