数组是JAVA引用数据类型的一种,在本季中讲解了数组的定义与使用,同时为了便于读者更好的理解JAVA中的数组操作,也讲解了数组的各种案例。最后讲解方法及方法的重载,以及在方法中如何传递数组等操作。
 
本季目标
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组
一、数组
数组概述
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_02
如果现在要定义100个变量,都是整型的(int),我们用最原始的写法就是这样。
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_03
我们发现会很麻烦,而且要写的很长很长。所以我们可以使用 数组,什么数组呢?简单的说数组就是多个变量的集合体。
一维数组声明
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_04
类型        数组名称[]
int          i[]
类型[]     数组名称
创建数组(1)
只要想使用引用数据类型,则肯定要开辟空间的。
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_05
声明数组是在栈内存之中。
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_06
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_07
数组i[0]输出是0哈,我们发现数组默认都有一个值,int整型的默认值是零。
格式:数组名称 = new 数据类型[个数] ;
所有的数组下标都是从0开始的,100个元素:0~99
创建数组(2)
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_08
我们发现整型数组在堆内存中开辟空间时,默认值都是0哈,我们来验证一下哈,数据一般都是用for循环语句来操作的。
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_09
我们发现开辟空间时,每一个元素默认值都是0
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_10
创建数组(3)
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_11
我们参考上面的例子,给数组赋值,从小到大依次都是奇数哈。
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_12
我们看下效果
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_13
这是一个最简单的数组举例,在程序中,这就叫一维数组哈。
程序的几个注意点:
1、 数组必须先声明后开辟空间才可以使用。
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_14
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_15
2、 数组的下标从0 开始,最高为数组个数-1,如果访问的数组下标是错误的话,则出现“ArrayIndexOutOfBoundsException”,表示数组越界了。
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_16
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_17
3、 数组开辟空间之后每个元素的内容都是其默认值,如果是整型就是“0”
数组初始化:动态初始化和静态初始化
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_18
动态初始化指的是数组在开辟空间的时候没有指定其具体的内容,而是由其在后面的程序中为其赋值。
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_19
我们来举个静态初始化的例子哈
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_20
我们发现所有内容都依次输出了哈。
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_21
可以动态取得数组的长度:数组名称.length
数组元素的默认初始化
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_22
数组元素的引用
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_23
OK,那我们来做6个题目来练练手哈。
(1)给出十个整数(int型),给定任意一个数字查询是否存在该10个数字内。
 [零基础学JAVA]Java SE基础部分-05.数组与方法_数组_24
我们看下给定值15查找后的结果应该不在里面哈,没有找到,正解,三目运算的输出也和if...else语句一样哈
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_25
我们再来看看查找数字8哈。
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_26
显示找到了哈
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_27
(2)给出十个老师的打分求出计算平均分。
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_28
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_29
(3)给出十个老师的打分,对十个老师的打分找到最高分。
这是非常典型的在数组中求最大值的题目哈~
原理:先定义一个变量,此变量用于接收数组中第一个元素,之后使用此变量与数组中的其他元素进行比较,如果小了,则将这个数组元素的内容给这个变量。
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_30
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_31
(4)定义一个字符类型的数组,大小任意。请分别统计大写,小写以及其他字符的个数。
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_32
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_33
(5)定义一个整型数组,保存10个数据,利用程序完成将最大值保存在数组中第一个元素。
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_34
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_35
(6)对排序好的数组,添加一个数字,将添加后的数字插入到数组合适的位置。
这一个问题哈,有点难度了哈~~~我们理清下思路一步一步来哈~~~
数组排序:冒泡算法
 [零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_36
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_37
数组本身不允许修改长度,已经定义好的长度是绝对不能动的。我们可以建立一个新的数组,此数组比之前的数组大一位哈。
 [零基础学JAVA]Java SE基础部分-05.数组与方法_方法_38
我们看下有没问题哈。
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_39
我们发现没有问题,新的数组可以这么定义执行哈~
下面我们要把原来数组里面的元素设置到新的数组里面去哈。
 [零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_40
现在我们看下y数组输出能否输出正常哈~
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_41
我们发现y数组确实比x数组大一位了哈,x数组中的元素也设置进了y数组中并能正常输出,那么我们可以设置一个要插入的数字,并且找到合适的位置把它插入时y数组,我们的要求就达到了哈,ok,我们继续。
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_42
我们定义的值是188,应该是在y[0]的位置,我们看下,能否正确输出bpoint值哈。
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_43
输出0,数字188应该在第一位,正常哈,我们来试下88,数字88最小,应该排在最后一位,也就是位置是10哈,我们看下效果哈。
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_44
输出10,正确哈~~~
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_45
要是98呢?因为我们是从右边开始依次移位数字98应该是在98和97之间,不是99和98之间哈,也就是第四位,插入点是3哈,我们验证下哈~~~
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_46
输出3,正解!
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_47
OK,现在既然我们插入点已经找到了哈,那我们现在可以以插入点为基准,其后面的元素可以依次向右移动了哈。
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_48 
插入数字98的效果~~~
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_49
插入数字198的效果~~~
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_50
插入数字56的效果~~~
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_51
ok,完全正确哈,这样这道问题就解决了哈。这题有点复杂,得多做几次多找找规律,程序就是找规律的哈,下面我们来讲下二维数组哈~~~
多维数组
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_52
先观察一个里面的个数一样的情况
 [零基础学JAVA]Java SE基础部分-05.数组与方法_方法_53
我们看我们定义的x[][]数组能否正常输出哈~
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_54
一开始那个int a[][]={{1,2},{3,4,0,9},{5,6,7}};到底是怎么输出的哈?
输出数组我们肯定要使用for循环,二维数组我们就可以用两个for循环嵌套,第一个for循环表示控制外面{}的元素个数a.length,比如{1,2},{3,4,0,9},{5,6,7}一共三个哈,第二个for循环表示控制二维数组里面{}每个元素的个数a[i].length,比如{1,2}一共两个,{3,4,0,9}一共四个,{5,6,7}一共三个。只要是数组就可以用length方法使用哈。
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_55
正确输出哈~
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_56
如果维数增加的话,我们知道二维是两层for循环,三维的话明摆着就是三层for循环哈~~~依次类推,我们在JAVA EE开发中着重点掌握的是一维数组哈~~~
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_57
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_58
多维数组初始化
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_59
二、方法
为什么我们把方法和数组放在一起讲哈,在方法中我们要操纵数组,包括理解什么是引用传递的问题哈~
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_60
此处讲解的方法指的是可以由main方法直接调用的方法。
1、定义一个没有返回值的方法,此方法打印“Hello World!!”
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_61
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_62
上例中public static void print()中的方法名称print()可以任意定义哈,我们定义成redking()也是可以的哈,我们看下效果哈~~~
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_63
执行正常哈~
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_64
这是一个最简单的方法,非常容易哈~~~
2、定义一个有返回值的方法
做一个两个数字相加的方法,则方法处必须要传入两个参数。
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_65
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_66
方法的重载
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_67
怎么理解上面的话的意思呢?我们比如现在要求完成加法,可能有两个整数相加,也可能是两个小数相加,或者是三个整数相加。我们来实现一下哈~
如果用原来的方法的话我们会把程序写成这样哈.
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_68
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_69
如果按以上实现了,则方法名称不统一,肯定执行起来非常的麻烦。
我们发现方法名称不统一,方法参数的类型和个数也不一致哈,下面我们用方法重载的概念来实现哈~看下程序是否会分别的去调用哈~
我们设定add(11,22,33)三个整数相加哈
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_70
结果是程序调用了C方法
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_71
如果我们换成是add(11.8f,22.6f),两个小数相加哈,应该是调用B方法相加哈,我们执行下看下效果。
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_72
OK,完全正确哈~
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_73
不同的方法名称根据参数的个数或类型,完成的功能也不同。
注意点:
观察以下的代码,看是否是重载:
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_74
我们执行下看下效果,提示add方法已经被定义了哈
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_75
从而我们得出结论:返回值类型的不同,肯定不是方法重载,重载的时候看的是方法中的参数。
方法中可以传递数组
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_76
s和p都指向同一个堆内存哈~都拥有同一个空间使用权。
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_77
我们发现程序确实调用了print()方法把我们s数组中的元素都输出了哈。
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_78
我们设定s数组中第一个元素为108哈,我们执行输出验证一下
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_79
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_80
现在我们设定一个方法,为数组中的元素赋值,并且都是奇数。
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_81
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_82
我们发现输出的都是奇数哈,这就叫数组的引用传递。
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_83
总结:引用传递只在引用数据类型中使用,如果在方法中将空间的内容修改,就算方法无返回值,则修改也会保留下来,修改的是其本身。
使用方法返回一个数组:
 [零基础学JAVA]Java SE基础部分-05.数组与方法_数组_84
我们看到程序确实输出返回了一个数组哈~
 [零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_85
设计如下一个方法:
要求可以完成数组的拷贝,比如,可以从A数组中到第几个元素,拷贝到B数组之中。
此方法必然要接收两个数组:源数组、目标数组,源数组拷贝的开始点,目标数组拷贝的开始点,还需要长度的参数。
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_86
我们发现输出的结果达到我们需要的要求哈!
 [零基础学JAVA]Java SE基础部分-05.数组与方法_Java_87
在系统中本身已经提供好了一个与之类似的数组操作方法:System.arraycopy
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_88
执行效果一样哈~
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_89
排序方法:自己写的,实际上在JDK中也有一个对应的数组排序方法:java.util.Arrays.sort(数组名称) ;
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_90
我们看到输出结果确实也是将我们定义的x[]数组从低到高进行排序了哈!
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_91
记得我们写过打印三角形的程序如下:
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_92
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_93
现在我们感觉不合适哈,为什么哈?我们发觉我们写的代码太长,我们最好将其定义为一个方法,我们要打印3行它就打印3行的三角形,要打印10行它就打印10行的三角形,要打印100行它就打印100行的三角形哈!
我们先设置一个方法printStar(),输出三行的正三角形看看效果哈~
 [零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_94
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_95
要是我们要输出10行呢?
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_96
的确输出了10行的三角形哈~~
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_97
那我们加大点,输出20行的三角形呢?
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_98
正确输出20行的三角形哈!
[零基础学JAVA]Java SE基础部分-05.数组与方法_方法_99
那我们可以打印正三角形,反过来我们可以打印反三角形吗?组合成一个菱形哈。我们需要在定义一个方法,在正三角形下面输出一个对称的反三角形,组合成一个菱形。现在我们分析哈,反三角形比正三角形输出的空格是依次增加的哈。
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_100
我们发现只打印出了一半哈......
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_101
左边没有输出空格哈,我们加一行输出空格的for循环,再改改哈~~~
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_102
有点成形了,只是最下面的一个"*"没输出,我们查下什么原因。
[零基础学JAVA]Java SE基础部分-05.数组与方法_数组_103
我们发现反三角形少输出了一行哈,我们修改成lineNumber+1
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_104
标准的菱形哈~~~
[零基础学JAVA]Java SE基础部分-05.数组与方法_零基础学JAVA_105
如果我们要正三角形和反三角形相对称的菱形呢?我们修改两处代码哈。
[零基础学JAVA]Java SE基础部分-05.数组与方法_Java_106
ok哈~~~
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_107
如果我们要把程序写得非常好的话,肯定我们要把方法定义的非常合理,如果不合理的话,我们可以自己去调整和修改,比如加入各种的判断验证等等。以上就是我们java的方法哈~~~
本季重点
[零基础学JAVA]Java SE基础部分-05.数组与方法_面向对象_108
今天我们把我们的方法和数组学完后,我们java的基础部分就没有了哈~我们要复习一下java的基础哈,下一季讲的就是我们java最核心的部分--java面向对象部分了哈~~~
ps:今天正好是双12,记念一下下~~~呵呵~~~o(∩_∩)o
####################################################################