我的老师给了我一份据说有这个清单的作业:
int[] list = {-2, 8, 13, 22, 25, 25, 38, 42, 51, 103};
并为binarySearch使用此方法:
public class binarySearch {
public static int binarySearch(int[] a, int target, int min, int max) {
if (min > max) {
return -1; // target not found
} else {
int mid = (min + max) / 2;
if (a[mid] < target) { // too small; go right
return binarySearch(a, target, mid + 1, max);
} else if (a[mid] > target) { // too large; go left
return binarySearch(a, target, min, mid - 1);
} else {
return mid; // target found; a[mid] == target
}
}
}
}
然后她说通过这些陈述来调用它来测试它:
public class arrayDriver{
public static void main(String []args){
int[] list = {-2, 8, 13, 22, 25, 25, 38, 42, 51, 103};
System.out.println(binarySearch(list, 103, 0, 9));
System.out.println(binarySearch(list, 30, 2, 8));
}
}
这一切都很有意义但是当我这样做时,我得到了错误
error: cannot find symbol
而我的第一个猜测是因为我没有制作一个物体而没有做过,例如,list.binarySearch();
。所以我对这是如何工作感到困惑?任何帮助是极大的赞赏。
您正在使用两个不同的类。将主方法与binarysearch方法放在同一个类中:
public class BinarySearch{
public static int binarySearch(int[] a, int target, int min, int max) {
if (min > max) {
return -1; // target not found
} else {
int mid = (min + max) / 2;
if (a[mid] < target) { // too small; go right
return binarySearch(a, target, mid + 1, max);
} else if (a[mid] > target) { // too large; go left
return binarySearch(a, target, min, mid - 1);
} else {
return mid; // target found; a[mid] == target
}
}
public static void main(String []args){
int[] list = {-2, 8, 13, 22, 25, 25, 38, 42, 51, 103};
System.out.println(binarySearch(list, 103, 0, 9));
System.out.println(binarySearch(list, 30, 2, 8));
}
}
如您所见,此代码:
public static void main(String []args){
int[] list = {-2, 8, 13, 22, 25, 25, 38, 42, 51, 103};
System.out.println(binarySearch(list, 103, 0, 9));
System.out.println(binarySearch(list, 30, 2, 8));
}
在一个名为arrayDriver
的类中。这段代码:
public static int binarySearch(int[] a, int target, int min, int max) {
if (min > max) {
return -1; // target not found
} else {
int mid = (min + max) / 2;
if (a[mid] < target) { // too small; go right
return binarySearch(a, target, mid + 1, max);
} else if (a[mid] > target) { // too large; go left
return binarySearch(a, target, min, mid - 1);
} else {
return mid; // target found; a[mid] == target
}
}
}
是在另一个叫做binarySearch
的班级。
在Java中,如果调用者与方法在同一个类中,则只能直接访问方法(即没有后缀)。因此,如果您的main
方法在binarySearch
而不是arrayDriver
,代码将起作用。所以...
解决方案1
把main方法放在binarySearch
类中
解决方案2
把binarySearch
方法放在arrayDriver
类中
假设您无法更改其中任何一种方法的类。你可以通过添加一个类名后缀binarySearch
来调用binarySearch.
解决方案3
System.out.println(binarySearch.binarySearch(list, 103, 0, 9));
如果你想将它们作为单独的类保存,你可以从ArrayDriver类扩展BinarySearch类。
public class ArrayDriver extends BinarySearch{
public static void main(String []args){
int[] list = {-2, 8, 13, 22, 25, 25, 38, 42, 51, 103};
System.out.println(binarySearch(list, 103, 0, 9));
System.out.println(binarySearch(list, 30, 2, 8));
}
}
这将允许您使用在BinarySearch类中创建的任何公共/受保护变量/方法,而无需显式创建该类的实例。