在java中没有对象的调用方法?

问题描述 投票:-3回答:3

我的老师给了我一份据说有这个清单的作业:

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();。所以我对这是如何工作感到困惑?任何帮助是极大的赞赏。

java
3个回答
0
投票

您正在使用两个不同的类。将主方法与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));
    }
}

0
投票

如您所见,此代码:

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));

0
投票

如果你想将它们作为单独的类保存,你可以从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类中创建的任何公共/受保护变量/方法,而无需显式创建该类的实例。

© www.soinside.com 2019 - 2024. All rights reserved.