1,函数
函数就是定义在类中的具有特定功能的一段独立小程序,也称之为方法。
格式:修饰符 返回值类型 函数名 (参数类型 形式参数1,参数类型 形式参数2,……)
{
执行语句;
return 返回值;
}
一般,我们为了提高代码的复用性,我们可以将代码进行抽取,封装成独立的函数,用大的时候直接调用即可。对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。主要注意的是:函数中只能调用函数,不可以在函数中再定义函数,定义函数时,函数的结果应该返回给调用者,交由调用者处理。
看代码:
class FunctionDemo {
public static void main(String[] args) {
getResult(5);
}
public static void getResult(int num) { //这个就是封装之后的函数,这样就提高了函数的复用性和扩展性。它的功能是计算一个数乘以3加5的结果,void为不
System.out.println(num * 3 + 5); //返回结果
return;//可以省略 }
}
}
如何定义一个函数呢?
1,既然函数是一个独立的功能,那么该功能的运算结果是什么先明确,因为这是在明确函数的返回值类型。 2,在明确在定义该功能的过程中是否需要未知的内容参与运算。因为是在明确函数的参数列表(参数的类型和参数的个数)。再来看一段代码:
class FunctionTest {
public static void main(String[] args) {
draw(5,6);
printHr();
draw(7,9);
printHr();
print99();
}
//定义一个打印99乘法表功能的函数。
public static void print99()
{ for(int x=1; x<=9; x++) { for(int y=1; y<=x; y++) { System.out.print(y+"*"+x+"="+y*x+"\t"); } System.out.println(); } }public static void draw(int row,int col)//打印矩形的方法
{ for(int x=0; x<row; x++) { for(int y=0; y<col; y++) { System.out.print("*"); } System.out.println(); } }public static void printHr()//打印水平线
{ System.out.println("------------------------------"); }}
函数的重载:函数名相同,参数列表有变只和这两个有关系啊。看下面的例子
class FunctionOverload {
public static void main(String[] args) {
add(4,5);
add(4,5,6);
}
//定义一个加法运算,获取两个整数的和。
public static int add(int x,int y) {
return x+y;
}
//定义一个加法,获取三个整数的和。
public static int add(int x,int y,int z) {
return add(x,y)+z;
}
}
什么时候用重载?
当定义的功能相同,但参与运算的未知内容不同。 那么,这时就定义一个函数名称以表示起功能,方便阅读,而通过参数列表的不同来区分多个同名函数2,数组
数组就是同一种类型数据的集合,数组是一个容器,它可以给数组中的元素自动从0开始编号,方便操作。
申明:
元素类型[] 数组名=new 元素类型[元素个数或数组长度]; int [] arr=new int[5];
元素类型[] 数组名=new 元素类型[]{元素1,元素2,……}; int [] arr=new int[]{1,2,3,4,5};
数组的初始化:
静态初始化:创建数组时,程序员显式地为数组中的元素赋初值,你不指定数组长度 int[] arr = {1,2,3,4,5} ; int[] arr1 = new int[]{1,2,3,4,5};
动态初始化:创建数组时,由系统默认地为数组中的元素赋初值,你指定数组长度 int[] a; a = new int[3];
数组元素的默认值:int型的是0,float是0.0,string是null
数组的异常:
数组越界异常:操作数组时,访问到了数组中不存在的角标, ArrayIndexOutOfBoundsException
空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体, NullPointerException
获取数组的长度:
数组名.length System.out.println("length:"+arr.length);
要获取数组的长度,通常要用到遍历。有一个题是这样的,要求将数组的元素用逗号隔开
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]+"]");
}
}
数组的各种排序
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]) { 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]) { 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 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]+"]");
}
}
数组的反转
public static void reverseArray(int[] arr)
{ for(int start=0,end=arr.length-1; start<end ; start++,end--) { swap(arr,start,end); } }public static void swap(int[] arr,int a,int b)
{ int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; }
定义功能,获取key第一次出现在数组中的位置。如果返回是-1,那么代表该key在数组中不存在。
public static int getIndex(int[] arr,int key) { for(int x=0; x<arr.length; x++) { if(arr[x]==key) return x; } return -1; }
public static int getIndex_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 min;
}
折半查找
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;
}