学习总结(二)
来源:互联网 发布:网络预约汽车运输证 编辑:程序博客网 时间:2024/05/16 08:44
方法(函数)
在JAVA语言中,所谓的方法其实就相当于用户自定义函数,也就相当于是子函数 ,只不过是和其他语言的定义方式不同而已。在正确定义完方法后,便可以在main函数中对其进行调用,这样能减少主函数内的代码数量,还可以使代码变的更有逻辑,方便后期修改检查,提高了代码的重用性。
JAVA中方法的声明格式为:
[修饰符1 修饰符2 …] 返回值类型 方法名(形式参数列表){ 程序代码; [return 返回值];}
目前常用的修饰符为public、static两种;返回值类型则要看方法所实现的功能了,是需要返回值还是不需要返回值;而方法名在命名时第一个单词小写,后面紧跟的每个单词首字母需要大写;对于形式参数而言,实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配,这样方法中的形参才能准确的接收到实参值,便可以在方法中正确的进行运算。形参是针对方法中而言的,而实参则为实际的参数值。有些方法甚至可以不需要参数,仅从逻辑上完成就行。
其实在传递参数时,如果是基本数据类型,那么方法接收到的其实是数据的副本,不影响主函数中的数据值。而如果传递的参数是引用类型,则传递到方法中的则为参数地址。
如果方法需要像主函数返回返回值,则需要在方法的最后一行加上return 表达式;
表达式即为需要将方法中返回给主函数的值。如果仅仅只有return,没有返回值,那整个方法当即结束。
在JAVA语言中,主要只用以下几种形式来调用方法;
直接调用:方法名(实参列表);
类名调用:类名.方法名(实参列表);
对象调用:对象.方法名(实参列表);(面向对象会使用)
递归
递归其本身的含义就是递推再回归,其本质是方法自己调用自己,但在递归中一定要找到一个出口(结束条件),并且递归的方向一定往出口方向逼近的,这样才不会形成死循环。
数组
数组其实是一个变量,是用来储存相同数据类型的一组数据。在往数组中输送数据时首先要先声明数组,之后再往其中存入相同类型的数据。声明变量与声明数组之间的差异就是在内存空间所划出的空间是否为单列还是连续。
数组的基本要素有
【标识符,数组长度,元素下表】
标识符为数组的名称。
数组的长度就是数组中的元素个数。
元素下表是对数组中的元素进行编号,从0开始。相当于是数组中元素的地址。每个元素可以通过下标来进行访问。
声明数组
声明数组有三种方式
int[ ] a; int b[ ]; String[ ] c;
数据类型 数组名[ ];
数据类型[ ] 数组名;
在声明数组时,不需要规定数组长度。
分配空间
在声明数组后,需要给数组分配空间
a = new int[30]; b = new int[6]; c = new String[30];
括号中的数字为数组中最大的元素个数。
其实比较常用的方法有声明的同时并分配好数组的空间,其表达方式为
数据类型[ ] 数组名 = new 数据类型[大小] ;
赋值
在声明完并分配完空间之后,我们就需要往数组中赋值了,在这里我们可以通过数组下标一个个的往期空间内赋值
a[0] = 89;a[1] = 79;a[2] = 76;……
但是这样无用代码数会大幅度升高,所以一般来说我们常用静态初始化来对数组中的元素进行赋值int[] a={65,59,73,71,98,66};
,这样就会方便很多。
遍历数组
遍历数组其实就是”过“一边数组,这样才方便统计数组中的元素,或者是说方便输出。遍历数组的方式有以下两种,都采用的for循环
1.
for(int i=0;i<array.length;i++){ // 逐个遍历元素array[i] }
2.
for(int x:array){ // x为当前正在遍历的数组元素 }//for(数据类型 变量名称:数组名称){ // … //}
用这两种方式都可以实现数组的遍历。
数组拷贝
系统类中有一个自带的静态copy方法,格式如下 public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
src: 源数组名称
srcPos: 源数组的起始位置
dest: 目标数组名称
destPos:目标数组的起始位置
length:拷贝的数组元素个数
用该方法可以直接将一个现有数组中的任何元素copy到新的数组中去。
排序算法
冒泡排序
冒泡排序是我个人比较喜欢的一种排序方法,因为它理解起来较为简单,而且用代码实现起来也比较容易只需要两组循环嵌套就行了。冒泡排序的具体思路是,从无序数组中的第一个元素开始向后开始,每两个元素相比较,大的放后面小的放前面,这样一来第一轮各元素比较后就把最大的元素就没放到了最后一个位置,第二轮在从第一轮结束后的第一个元素开始,再重复两个元素比较大小,较大的元素放后面。这样一来很明显就需要两个循环,外层控制轮数,内层控制交换次数。具体结构如下
for (int i = 1; i <= d.length-1; i++) { for (int j = 0; j < d.length-i; j++) { if(d[j]>d[j+1]) { int temp=d[j+1]; d[j+1]=d[j]; d[j]=temp;}
在内层循环中有一个数据交换的过程,这个过程需要我们自己定义一个中间变量,首先将第一个数据储存在中间变量当中,然后把第二个数据的值赋予第一个数据变量,再将中间变量的值赋予第二个数据变量当中。这样就算完成了数据交换的过程。
用图来表述其第一轮的逻辑过程如下
画的有些随意。。。
第二轮再次两元素比较,较大的排在后面,以此类推。
插入排序
插入排序的思路是,将目标元素放在前面已经排好序的元素中,让目标元素找到比前一个元素大,比后一个元素小的位置后即可完成该轮排序,之后再将下一个目标元素与上一轮排好的数列中每个元素相比较,放置好准确的位置即可,用图来表述即为
快速排序
快速排序是思路是从待排序的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的数据元素放到左边,所有比它大的数据元素放到它的右边,然后再分别从左/右部分的数据中再次完成开始的第一步,最终即可排序完成。
二维数组
二维数组的声明及实例化
具体的声明及实例化结构为
数据类型[][] 数组名称=new 数据类型[行的个数][列的个数];
而二维数组访问的具体元素的结构是
数组名称[行的索引][列的索引]
二维数组其实就是多个一维数组,第一个数字代表的是第n+1个一维数组,而第二个数字代表的是这个一维数组中的第m+1个元素。
二维数组的静态初始化
我们常用的二维数组静态初始化的方法格式为
数据类型[][] 数组名称={ {元素1,元素2,....}, {元素1,元素2,....}, ... };
这样就可以完成二维数组的静态初始化
- 学习总结(二)
- 学习总结(二)
- dom4j学习总结(二)
- PHP学习总结(二)
- dom4j学习总结(二)
- dom4j学习总结(二)
- TD学习总结(二)
- XML学习总结(二)
- SQL学习总结(二)
- dom4j学习总结(二)
- WCF学习总结(二)
- TCP学习总结(二)
- jQuery学习总结(二)
- C++学习总结(二 )
- ajax 学习总结(二)
- jQuery学习总结(二)
- 驱动学习总结(二)
- redis学习总结(二)
- 统计在线人数
- Ubuntu 14.04 下安装Qt5 并配置开发环境(终端下使用)
- HDU 1071 The area
- C++中的static关键字
- vue2+vuex+vue-router 快速入门(五) vuex 介绍
- 学习总结(二)
- go遍历文件夹和文件
- sftp常用命令介绍
- 【UE4 shader】防护盾shader
- MySQL导出数据库、数据库表结构、存储过程及函数
- vmware linux nat模式设置静态ip
- 手把手教你把基于 eclipse 的项目转换为基于 idea 的项目
- HDU-4738Caocao's Bridges
- keystone中的参数校验