[零基础学JAVA]Java SE基础部分-05.数组与方法

简介:
数组是JAVA引用数据类型的一种,在本季中讲解了数组的定义与使用,同时为了便于读者更好的理解JAVA中的数组操作,也讲解了数组的各种案例。最后讲解方法及方法的重载,以及在方法中如何传递数组等操作。
 
本季目标
image
一、数组
数组概述
image
如果现在要定义100个变量,都是整型的(int),我们用最原始的写法就是这样。
image
我们发现会很麻烦,而且要写的很长很长。所以我们可以使用 数组,什么数组呢?简单的说数组就是多个变量的集合体。
一维数组声明
image
类型        数组名称 [] 
int          i[] 
类型 []     数组名称
创建数组(1)
只要想使用引用数据类型,则肯定要开辟空间的。
image
声明数组是在栈内存之中。
image
image
数组i[0]输出是0哈,我们发现数组默认都有一个值,int整型的默认值是零。 
格式:数组名称 = new 数据类型[个数] ; 
所有的数组下标都是从0开始的,100个元素:0~99
创建数组(2)
image
我们发现整型数组在堆内存中开辟空间时,默认值都是0哈,我们来验证一下哈,数据一般都是用for循环语句来操作的。
image
我们发现开辟空间时,每一个元素默认值都是0
image
创建数组(3)
image
我们参考上面的例子,给数组赋值,从小到大依次都是奇数哈。
image
我们看下效果
image
这是一个最简单的数组举例,在程序中,这就叫一维数组哈。
程序的几个注意点: 
1、 数组必须先声明后开辟空间才可以使用。
image
image 
2、 数组的下标从0 开始,最高为数组个数-1,如果访问的数组下标是错误的话,则出现“ArrayIndexOutOfBoundsException”,表示数组越界了。
image
image 
3、 数组开辟空间之后每个元素的内容都是其默认值,如果是整型就是“0”
数组初始化:动态初始化和静态初始化
image
动态初始化指的是数组在开辟空间的时候没有指定其具体的内容,而是由其在后面的程序中为其赋值。
image
我们来举个静态初始化的例子哈
image
我们发现所有内容都依次输出了哈。
image
可以动态取得数组的长度:数组名称.length
数组元素的默认初始化
image
数组元素的引用
image
OK,那我们来做6个题目来练练手哈。
(1)给出十个整数(int型),给定任意一个数字查询是否存在该10个数字内。
  image
我们看下给定值15查找后的结果应该不在里面哈,没有找到,正解,三目运算的输出也和if...else语句一样哈
image
我们再来看看查找数字8哈。
image
显示找到了哈
image
(2)给出十个老师的打分求出计算平均分。
image
image
(3)给出十个老师的打分,对十个老师的打分找到最高分。
这是非常典型的在数组中求最大值的题目哈~ 
原理:先定义一个变量,此变量用于接收数组中第一个元素,之后使用此变量与数组中的其他元素进行比较,如果小了,则将这个数组元素的内容给这个变量。
image
image
(4)定义一个字符类型的数组,大小任意。请分别统计大写,小写以及其他字符的个数。
image
image
(5)定义一个整型数组,保存10个数据,利用程序完成将最大值保存在数组中第一个元素。
image
image
(6)对排序好的数组,添加一个数字,将添加后的数字插入到数组合适的位置。
这一个问题哈,有点难度了哈~~~我们理清下思路一步一步来哈~~~
数组排序:冒泡算法
  image
image
数组本身不允许修改长度,已经定义好的长度是绝对不能动的。我们可以建立一个新的数组,此数组比之前的数组大一位哈。
  image
我们看下有没问题哈。
image
我们发现没有问题,新的数组可以这么定义执行哈~
下面我们要把原来数组里面的元素设置到新的数组里面去哈。
  image
现在我们看下y数组输出能否输出正常哈~
image
我们发现y数组确实比x数组大一位了哈,x数组中的元素也设置进了y数组中并能正常输出,那么我们可以设置一个要插入的数字,并且找到合适的位置把它插入时y数组,我们的要求就达到了哈,ok,我们继续。
image
我们定义的值是188,应该是在y[0]的位置,我们看下,能否正确输出bpoint值哈。
image
输出0,数字188应该在第一位,正常哈,我们来试下88,数字88最小,应该排在最后一位,也就是位置是10哈,我们看下效果哈。
image
输出10,正确哈~~~
image
要是98呢?因为我们是从右边开始依次移位数字98应该是在98和97之间,不是99和98之间哈,也就是第四位,插入点是3哈,我们验证下哈~~~
image
输出3,正解!
image
OK,现在既然我们插入点已经找到了哈,那我们现在可以以插入点为基准,其后面的元素可以依次向右移动了哈。
image 
插入数字98的效果~~~
image
插入数字198的效果~~~
image
插入数字56的效果~~~
image
ok,完全正确哈,这样这道问题就解决了哈。这题有点复杂,得多做几次多找找规律,程序就是找规律的哈,下面我们来讲下二维数组哈~~~
多维数组
image
先观察一个里面的个数一样的情况
  image
我们看我们定义的x[][]数组能否正常输出哈~
image
一开始那个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方法使用哈。
image
正确输出哈~
image
如果维数增加的话,我们知道二维是两层for循环,三维的话明摆着就是三层for循环哈~~~依次类推,我们在JAVA EE开发中着重点掌握的是一维数组哈~~~
image
image
多维数组初始化
image
二、方法
为什么我们把方法和数组放在一起讲哈,在方法中我们要操纵数组,包括理解什么是引用传递的问题哈~
image
此处讲解的方法指的是可以由main方法直接调用的方法。
1、定义一个没有返回值的方法,此方法打印“Hello World!!”
image
image
上例中public static void print()中的方法名称print()可以任意定义哈,我们定义成redking()也是可以的哈,我们看下效果哈~~~
image
执行正常哈~
image
这是一个最简单的方法,非常容易哈~~~
2、定义一个有返回值的方法 
做一个两个数字相加的方法,则方法处必须要传入两个参数。
image
image
方法的重载
image
怎么理解上面的话的意思呢?我们比如现在要求完成加法,可能有两个整数相加,也可能是两个小数相加,或者是三个整数相加。我们来实现一下哈~
如果用原来的方法的话我们会把程序写成这样哈.
image
image
如果按以上实现了,则方法名称不统一,肯定执行起来非常的麻烦。
我们发现方法名称不统一,方法参数的类型和个数也不一致哈,下面我们用方法重载的概念来实现哈~看下程序是否会分别的去调用哈~
我们设定add(11,22,33)三个整数相加哈
image
结果是程序调用了C方法
image
如果我们换成是add(11.8f,22.6f),两个小数相加哈,应该是调用B方法相加哈,我们执行下看下效果。
image
OK,完全正确哈~
image
不同的方法名称根据参数的个数或类型,完成的功能也不同。
注意点: 
观察以下的代码,看是否是重载:
image
我们执行下看下效果,提示add方法已经被定义了哈
image
从而我们得出结论:返回值类型的不同,肯定不是方法重载,重载的时候看的是方法中的参数。
方法中可以传递数组
image
s和p都指向同一个堆内存哈~都拥有同一个空间使用权。
image
我们发现程序确实调用了print()方法把我们s数组中的元素都输出了哈。
image
我们设定s数组中第一个元素为108哈,我们执行输出验证一下
image
image
现在我们设定一个方法,为数组中的元素赋值,并且都是奇数。
image
image
我们发现输出的都是奇数哈,这就叫数组的引用传递。
image
总结:引用传递只在引用数据类型中使用,如果在方法中将空间的内容修改,就算方法无返回值,则修改也会保留下来,修改的是其本身。
使用方法返回一个数组:
  image
我们看到程序确实输出返回了一个数组哈~
  image
设计如下一个方法: 
要求可以完成数组的拷贝,比如,可以从A数组中到第几个元素,拷贝到B数组之中。 
此方法必然要接收两个数组:源数组、目标数组,源数组拷贝的开始点,目标数组拷贝的开始点,还需要长度的参数。
image
我们发现输出的结果达到我们需要的要求哈!
  image
在系统中本身已经提供好了一个与之类似的数组操作方法: System.arraycopy
image
执行效果一样哈~
image
排序方法:自己写的,实际上在JDK中也有一个对应的数组排序方法: java.util.Arrays.sort(数组名称) ;
image
我们看到输出结果确实也是将我们定义的x[]数组从低到高进行排序了哈!
image
记得我们写过打印三角形的程序如下:
image
image
现在我们感觉不合适哈,为什么哈?我们发觉我们写的代码太长,我们最好将其定义为一个方法,我们要打印3行它就打印3行的三角形,要打印10行它就打印10行的三角形,要打印100行它就打印100行的三角形哈!
我们先设置一个方法printStar(),输出三行的正三角形看看效果哈~
  image
image
要是我们要输出10行呢?
image
的确输出了10行的三角形哈~~
image
那我们加大点,输出20行的三角形呢?
image
正确输出20行的三角形哈!
image
那我们可以打印正三角形,反过来我们可以打印反三角形吗?组合成一个菱形哈。我们需要在定义一个方法,在正三角形下面输出一个对称的反三角形,组合成一个菱形。现在我们分析哈,反三角形比正三角形输出的空格是依次增加的哈。
image
我们发现只打印出了一半哈......
image
左边没有输出空格哈,我们加一行输出空格的for循环,再改改哈~~~
image
有点成形了,只是最下面的一个"*"没输出,我们查下什么原因。
image
我们发现反三角形少输出了一行哈,我们修改成lineNumber+1
image
标准的菱形哈~~~
image
如果我们要正三角形和反三角形相对称的菱形呢?我们修改两处代码哈。
image
ok哈~~~
image
如果我们要把程序写得非常好的话,肯定我们要把方法定义的非常合理,如果不合理的话,我们可以自己去调整和修改,比如加入各种的判断验证等等。以上就是我们java的方法哈~~~
本季重点
image
今天我们把我们的方法和数组学完后,我们java的基础部分就没有了哈~我们要复习一下java的基础哈,下一季讲的就是我们java最核心的部分--java面向对象部分了哈~~~
ps:今天正好是双12,记念一下下~~~呵呵~~~o(∩_∩)o
####################################################################










本文转自redking51CTO博客,原文链接:http://blog.51cto.com/redking/119135 ,如需转载请自行联系原作者
相关文章
|
15天前
|
Java
Java中ReentrantLock中tryLock()方法加锁分析
Java中ReentrantLock中tryLock()方法加锁分析
13 0
|
4天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
28 3
|
4天前
|
存储 Java 程序员
Java 数组
4月更文挑战第16天
|
1天前
|
Java
Java 与垃圾回收有关的方法
Java 与垃圾回收有关的方法
|
2天前
|
存储 Java 测试技术
一文搞清楚Java中的方法、常量、变量、参数
在JVM的运转中,承载的是数据,而数据的一种变现形式就是“量”,量分为:**常量与变量**,我们在数学和物理学中已经接触过变量的概念了,在Java中的变量就是在程序运行过程中可以改变其值的量。
9 0
|
6天前
|
存储 Java
Java动态转发代理IP的实现方法
Java动态转发代理IP的实现方法
22 11
|
7天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
14 0
Java接口中可以定义哪些方法?
|
13天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
13 0
|
15天前
|
Java
Java中关于ConditionObject的signal()方法的分析
Java中关于ConditionObject的signal()方法的分析
21 4
|
15天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
23 9