函数和数组
一、函数
1、函数的定义
1.1 函数就是定义在类种的具有特定功能的一段独立小程序,函数也称之为方法。
1.2 函数的格式1:修饰符 返回值类型 函数名(参数类型 参数1,参数类型 参数2){
执行语句
return 返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是参数的数据类型。
参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
return:用于结束函数。
返回值:返回运行的结果值给我们的调用此方法的人。
1.3 函数的格式2:修饰符 void 函数名(参数类型 参数1,参数类型 参数2){
执行语句
return 返回值;
}
当函数运算后,没有具体的返回值时,这时返回类型用一个特殊的关键字来标识。该关键字就是void,void代表的是函数没有返回值。我们就可以省略掉return,如果加上也没错,不写的话,程序在编译的时候自动给我们加上。
2、函数的特点
2.1 定义函数可以讲功能代码进行封装。
2.2 便于对该功能进行复用。
2.3 函数只有被调用才会被执行。
2.4 函数的出现提高了代码的复用性。
注意:
(1)、函数中只能调用函数,不可以再函数内部定义函数。
(2)、定义函数时,函数的结果应该返回给调用者,交由调用者处理。
3、函数的应用
3.1如何定义一个函数呢?
(1)、既然函数是一个独立的功能,那么该功能的运算结果是什么先要明确。(因为这事在明确函数的返回类型)
(2)、在明确定义该功能的过程中是否需要位置的内容参与运算。(因为这是在明确函数的参数列表(参数的类型和参数的个数))。
4、函数的重载(overload)
4.1 重载的概念
在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可。
4.2 重载的特点
与返回类型无关,只看参数列表
4.3 重载的好处
方便阅读,优化了程序设计
二、数组
概念
同一种类型数据的集合,其实数组就是一个容器。
数组的好处
可以自动给数组中的元素从0开始变好,方便操作这些元素。
格式1
元素类型[] 数组名 = new 元素类型[元素个数或者数组长度];
示例:
int[] arr = new int[5];
arr[0] = 1;
arr[1] = 2;
System.out.println("arr[0]的值为:"+arr[0]);
System.out.println("arr[1]的值为:"+arr[1]);
System.out.println("arr[2]的值为:"+arr[2]);
System.out.println("arr[3]的值为:"+arr[3]);
System.out.println("arr[4]的值为:"+arr[4]);
// System.out.println("arr[5]的值为:"+arr[5]);//这里
会报错,因为这里访问到了数组不存在的角标上;
格式2
元素类型[] 数组名 = new 元素类型[]{元素,元素,......};
int[] arr = new int[]{3,5,1,7};
int[] arr1 = {1,3,5,4,7};
格式1
int[][] arr = new int[4][5];
注释:
定义了一个叫做arr的二维数组;
二维数组中有4个一维数组;
每一个一维数组里面有5个元素;
给第一个一维数组里面的角标为1的赋值为3的写法是:arr[0][1] = 3;
格式2
int[][] arr = new int[3][];
注释:
二维数组中有3个一维数组
每个一维数组都是默认的为null;
我们可以对三个一维数组进行初始化;
arr[0] = new int[1];
arr[1] = new int[2];
arr[2] = new int[3];
循环遍历数组
int[] arr = new int[8];
//循环遍历出数组里面的元素 数组中有一个属性可以
//直接获取到数组元素的个数(.length).使用方式:
数组名.length;
System.out.print("{");
for(int i = 0;i < arr.length;i++){
if(i != arr.length-1){
System.out.print(arr[i]+",");
}else{
System.out.print(arr[i]+"}");
}
}
//利用java自带方法输出
System.out.println(Arrays.toString(arr));
获取数组的最值(最大值和最小值)
思路:
1、获取最值需要进行比较,每一次比较都会有一个较大的值,因为该
值不确定,需要一个变量进行临储。
2、让数组中的每一个元素都和这个变量中的值进行比较,如果大于了
变量中的值,就用该变量记录较大值。
3、当所有的元素都比较完成,那么该变量中存储的就是数组中最大值
实现:
//最大值
int arr[] = {1,2,3,4,5};
int max = arr[0];
for(int i = 0;i < arr.length;i++){
if(arr[i] > max){
max = arr[i];
}
}
System.out.println("数组arr最大值为:"+max);
//最小值
int min = arr[0];
for(int i = 0;i < arr.length;i++){
if(arr[i] < min){
max = arr[i];
}
}
System.out.println("数组arr最小值为:"+min);
选择排序
//选择排序是依次和后面的元素进行比较,如从大到小排序,第一次循环结束比较得到最小值
int arr[] = {1,2,3,4,5};
for(int i = 0;i < arr.length-1;i++){
for(int a = i+1;a<arr.length;a++){
if(arr[i] > arr[a]){//判断条件
int temp = arr[a];//定义一个临时变量来存储,方便交换
arr[a] = arr[i];
arr[i] = temp;
}
}
}
System.out.print("{");
for(int b = 0;b < arr.length;b++){
if(b != arr.length-1){
System.out.print(arr[b]+",");
}else{
System.out.print(arr[b]+"}");
}
}
冒泡排序
//冒泡排序是两两进行比较,如从大到小排序,第一次外层循环结束后得到的是一个最小值
int arr[] = {1,2,3,4,5};
for(int i = 0;i < arr.length-1;i++){
for(int a = 0;a<arr.length-1-i;a++){//-i是让每一次
//比较的元素减少,-1是避免角标越界
if(arr[a] > arr[a+1]){
int temp = arr[a];//同选择排序一样交换,原理和水杯换水一样
arr[a] = arr[a+1];
arr[a+1] = temp;
}
}
}
System.out.print("{");
for(int b = 0;b < arr.length;b++){
if(b !=arr.length-1){
System.out.print(arr[b]+",");
}else{
System.out.print(arr[b]+"}");
}
}
封装方法
从我们的选择排序和冒泡排序里我们可以看到有很多相同的代码,我们
可以把这些相同的代码提取出来封装为方法;比如我们的判断交换和遍
历输出:
抽取1:
public static void PanDuan(int[] arr,int a,int b)
{
if(arr[a] > arr[b]){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}
抽取2:
public static void BianLi(){
System.out.print("{");
for(int b = 0;b < arr.length;b++){
if(b != arr.length-1){
System.out.print(arr[b]+",");
}else{
System.out.print(arr[b]+"}");
}
}
}