用于二进制搜索的给定简单代码
public static int binsearch(int [] a,int low, int high, int val) {
ArrayList<Integer> arr = new ArrayList();
if(a.length == 0)
return -1;
if(high < low)
return -1;
int mid = (low+high)/2;
arr.add(mid);
if(a[mid] == val)
return mid;
else if(val > a[mid])
return binsearch(a,mid+1,high,val);
else
return binsea
binsearch(a,low,mid-1,val);
}
我已在函数内初始化了一个Arraylist。如果我想在JAVA中,如何从main访问该ArrayList。因为此函数返回数组中数字的索引(如果存在),而不是Arraylist。
答案 0 :(得分:1)
您可以将方法传递给方法,而不是在方法中创建ArrayList
:
public static int binsearch(int [] a,int low, int high, int val, List<Integer> arr) {
if(a.length == 0)
return -1;
if(high < low)
return -1;
...
}
并从main
调用方法:
List<Integer> list = new ArrayList<>();
int index = binsearch(a,0, a.length, value, list);
通话结束后,您将可以访问该列表。
答案 1 :(得分:1)
将数组列表声明为全局变量,并在函数binsearch()
public class test{
static ArrayList<Integer> arr = new ArrayList();
public static void main(String[] args) {
binsearch(.... pass values);
//you can access array list here
}
public static int binsearch(int [] a,int low, int high, int val) {
if(a.length == 0)
return -1;
if(high < low)
return -1;
int mid = (low+high)/2;
arr.add(mid);
if(a[mid] == val)
return mid;
else if(val > a[mid])
return binsearch(a,mid+1,high,val);
else
return binsearch(a,low,mid-1,val);
}
}
答案 2 :(得分:1)
全局声明数组列表,因为它在函数范围内,因此无法访问它。
使ArrayList<Integer> arr = new ArrayList();
成为类的属性。