函数调用
举例说明Java中函数的调用
public class test {
public static void main(String[] args) {
int i = 0;
func(i);
i = i++;
System.out.println(i);
String str = "hello world";
char[] arr = {'g', 'o', 'o', 'd'};
func(str, arr);
System.out.println(str);//"hello world"
System.out.println(arr);//'g','a','o','d'
/**
* arr =>存储的是数组的地址
* arr[i]访问arr指向的数组的第i号位元素的值
* @param
*/
}
private static void func(String str,char[]arr) {
str="i love china!";
arr[1]='a';
}
private static void func(int i){
i++;
}
}
注释:func属于被调用函数,而main则为主函数(调用方函数),通过判断被调用函数改的是形参变量本身还是通过引用变量改的是它所指向的内存,即能判定出是否影响实参的值!
如上例所示:被调用函数(func)中String str所改变的是str本身,所有str中的“hello world”并不受影响,但char[]arr 则是改变它所指向的内存(arr[]这个数组1号位元素所存储的值 ‘o’)所以打印出来则为‘g’,‘a’,‘o’,‘d’。
举出两个简单的例子,加深对上述说法的理解
eg:a,b交换变量与arr[i],arr[j]交换变量
public class test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int i=0;
int j=0;
swap(a, b);
System.out.println(a+" "+b);
int []intArr={10,20};
swap(intArr,i=0,j=1);
System.out.println(intArr[i]+" "+intArr[j]);
}
private static void swap(int []intArr, int i,int j) {
int temp=intArr[i];
intArr[i]=intArr[j];
intArr[j]=temp;
}
private static void swap(int a,int b) {
int temp=a;
a=b;
b=temp;
}
}
打印结果为:
10 20
20 10
函数调用实现二分搜索
public class test {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int []arr=new int[11];
Random rd=new Random();
for (int i = 0; i < arr.length; i++) {
arr[i]=rd.nextInt(100);
}
System.out.println(Arrays.toString(arr));
Arrays.sort(arr);
int index=-1;
index=binarySearch(arr,11);
System.out.println(index);
}
/**
* 有序数列得二分查找算法
* @param arr
* @param data
* @return
*/
private static int binarySearch(int[] arr,int data) {
//先定义二分搜索需要的变量
int left = 0;
int right = arr.length - 1;
int middle = 0;
//开启一个循环,计算middle值和data相比较,判断3中不同情况
while (left <= right) {
middle = (left + right) / 2;
if (arr[middle] == data) {
return middle;
} else if (arr[middle] > data) {
right = middle - 1;
} else {
left = middle + 1;
}
}
//没有找到 返回-1
return -1;
}
}