------- android培训、java培训、期待与您交流! ----------
一、函数
1. 函数的定义
什么是函数?
函数就是定义在类中的具有特定功能的一段独立小程序,函数也成为方法。
2. 函数的格式
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2)
{
执行语句;
return 返回值;
}
返回值值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:一个变量,用于存储调用时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束函数。
返回值:该值会返回给调用者。
3. 函数的特点
(1)定义函数可以将功能代码进行封装。
(2)便于对该功能进行复用。
(3)函数只有被调用才会被执行。
(4)函数的出现提高了代码的复用性。
(5)对于函数没有具体返回值的情况,返回值类型用关键字void 表示,那么函数中的return语句如果在最后一行可以省略不写。
(6)注意:函数中只能调用函数,不可以在函数内部定义函数。定义函数时,函数的结果应该返回给调用者,交由调用者处理。
4. 函数的应用
两个明确:
(1)明确定义的功能最后的结果是什么。
(2)明确在定义该功能的过程中是否需要未知内容参与运算。
事例:
(1)需求:定义一个功能,可以实现两个整数的加法运算。
(2)分析:该功能的运算结果是什么?两个数的和,也是一个整数(int)。该功能的过程中是否有未知内容参与运算?加数和被加数是不确定的。(两个参数 int)
(3)代码:
<span style="font-family:SimSun;">int getSum(int x,int y)
{
return x+y;
}</span>
5. 函数的重载
(1)什么是函数的重载?
在Java中,同一个类中的两个或两个以上的方法可以有同一个名字,只要它们的参数声明不同即可。在这种情况下,该方法就被称为重载(overloaded),这个过程称为方法重载(method overloading)。
(2)重载的特点:
与返回值类型无关,只看参数列表。
(3)重载的好处:
方便于阅读,优化了程序设计。
(5)重载事例:
//返回两个整数的和
int add (int x,int y)
{
return x+y;
}
//返回三个整数的和
int add (int x,int y,intz)
{
return x+y+z;
}
//返回两个小数的和
int add (double x,double y)
{
return x+y;
}
(6)重载注意点:
参数类型、个数或顺序至少要有一个不同,不能通过访问权限、返回类型、抛出异常来进行重载。
(7)练习题:
判断下列选项中函数是否与给定函数重载:
void show(int x,double y,char z){}
(A): void show(int x,double z,char y){}
没有重载,参数类型,参数个数及参数顺序都相同。
(B): int show(int x,char z,double y){}
重载,参数类型不同(与返回值无关)
(C):void show(int x,char z,double y){}
重载,参数类型不同(参数类表中的参数是有顺序的)
(D):boolean show(int x,char z){}
重载
(E):void show(double y){}
重载
(F):double show(int a,char b,double c){}
不能和给定函数存在同一个类中,因为此函数除返回值类型和给定函数的不一样,相互冲突(调用函数时程序不知为调用者返回何种数值类型)
二、数组
1.数组的定义
2.数组的内存结构
3.数组操作常见问题
class ArrayDemo{
public static void main(String[] args){
int[] arr = new int[3];
System. out.println(arr[3]);
}
}
class ArrayDemo{
public static void main(String[] args){
int[] arr = null;
System. out.println(arr[0]);
}
}
运行结果:
4.数组的常见操作
/**
给定一个数组{5,1,6,4,2,8,9}。
1,获取数组中的最大值。
*/
class ArrayTest
{
/*
获取数组中的最大值。
思路:
1,获取最值需要进行比较。每一次比较都会有一个较大的值。因为该值不确定。
通过一个变量进行临储。
2,让数组中的每一个元素都和这个变量中的值进行比较。
如果大于了变量中的值,就用该该变量记录较大值。
3,当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值了。
步骤:
1,定义变量。初始化为数组中任意一个元素即可。
2,通过循环语句对数组进行遍历。
3,在变量过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给该变量;
需要定义一个功能来完成。以便提高复用性。
1,明确结果,数组中的最大元素 int。、
2,未知内容:一个数组。int[]
*/
public static int getMax(int[] arr)
{
int max = arr[0];
for(int x=1; x<arr.length; x++)
{
if(arr[x]>max)
max = arr[x];
}
return max;
}
public static void main(String[] args)
{
int[] arr ={5,1,6,4,2,8,9};
int max = getMax(arr);
System.out.println("max="+max);
}
}
运行结果:
import java.util.*;
/*
对给定数组进行排序。
{5,1,6,4,2,8,9}
*/
class ArrayTest2
{
/*
选择排序。
内循环结束一次,最值出现头角标位置上。
*/
public static void selectSort(int[] arr)
{
for (int x=0; x<arr.length-1 ; x++)
{
for(int y=x+1; y<arr.length; y++)
{
if(arr[x]>arr[y])
{
/*
int temp = arr[x];
arr[x] = arr[y];
arr[y]= temp;
*/
swap(arr,x,y);
}
}
}
}
/*
冒泡排序
*/
public static void bubbleSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=0; y<arr.length-x-1; y++)//-x:让每一次比较的元素减少,-1:避免角标越界。
{
if(arr[y]<arr[y+1])
{
/*
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
*/
swap(arr,y,y+1);
}
}
}
}
/*
发现无论什么排序。都需要对满足条件的元素进行位置置换。
所以可以把这部分相同的代码提取出来,单独封装成一个函数。
*/
public static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public static void main(String[] args)
{
int[] arr = {5,1,6,4,2,8,9};
//排序前;
printArray(arr);
//排序
selectSort(arr);
//bubbleSort(arr);
//Arrays.sort(arr);//java中已经定义好的一种排序方式。开发中,对数组排序。要使用该句代码。
//排序后:
printArray(arr);
}
//打印排序后数组
public static void printArray(int[] arr)
{
System.out.print("[");
for(int x=0; x<arr.length; x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+", ");
else
System.out.println(arr[x]+"]");
}
}
}
(3)拆半查找
/*
给定一个值,通过拆半查找找出此值在给定数组中的位置。
(数组中也可能找不到此值)
*/
import java.util.*;
class ArrayTest
{
public static void main(String[] args)
{
int[] arr = {3,2,1,5,4,2,9};
int index = halfSearch(arr,2);
System.out.println("index="+index);
// int[] arr = {2,4,5,7,8,19,32,45};//8
// int index = getIndex(arr,40);
// System.out.println("index="+index);
// int x = Arrays.binarySearch(arr,190);//java提供好的一个进行折半查找的功能。开发时使用这个。
// System.out.println("x="+x);
}
/*
折半查找。提高效率,但是必须要保证该数组是有序的数组。
*/
public static int halfSearch(int[] arr,int key)
{
int min,max,mid;
min = 0;
max = arr.length-1;
mid = (max+min)/2;
while(arr[mid]!=key)
{
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
if(min>max)
return -1;
mid = (max+min)/2;
}
return mid;
}
/*
折半的第二种方式。
*/
public static int halfSearch_2(int[] arr,int key)
{
int min = 0,max = arr.length-1,mid;
while(min<=max)
{
mid = (max+min)>>1;
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
}
/*
练习:有一个有序的数组,想要将一个元素插入到该数组中,
还要保证该数组是有序的。如何获取该元素在数组中的位置。
*/
public static int getIndex(int[] arr,int key)
{
int min = 0,max = arr.length-1,mid;
while(min<=max)
{
mid = (max+min)>>1;
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return min;
}
}