Java 递归二进制搜索列表:";不是一个声明;?怎样?

Java 递归二进制搜索列表:";不是一个声明;?怎样?,java,recursion,binary,binary-search,Java,Recursion,Binary,Binary Search,在做作业时,我总是遇到错误。我不太擅长Java,所以我不确定我做错了什么。作业要求我评估递归二进制搜索,我在binarySearch方法中发现一个错误;它说“list={”1,2,5,7,9,15“};”;是表达式的非法开头,不是语句,而“;”尽管显然有一个,但这是意料之中的。我不知道…我有点紧张 以下是该方法: //recursive binary search public boolean binarySearch(int[] list, int target, int low, i

在做作业时,我总是遇到错误。我不太擅长Java,所以我不确定我做错了什么。作业要求我评估递归二进制搜索,我在binarySearch方法中发现一个错误;它说“list={”1,2,5,7,9,15“};”;是表达式的非法开头,不是语句,而“;”尽管显然有一个,但这是意料之中的。我不知道…我有点紧张

以下是该方法:

//recursive binary search
    public boolean binarySearch(int[] list, int target, int low, int high) {
        list ={"1,2,5,7,9,15"}; 
        target = 5;
        boolean result = binarySearch(list, target, 0, list.length-1);

        executions++;
        int mid = (low + high) / 2;

        if(!result){
            System.out.println("Target not found -- bad search.");
        }else{
            System.out.println("Target found -- sucessful search!");
        }    
        if (list[mid] == target) {
            return true;
        } else {
            if (low > high) {
                return false;
            } else {
                comparisons++;
                if (list[mid] < target) {
                    return binarySearch(list, target, mid + 1, high);
                } else {
                    return binarySearch(list, target, low, mid - 1);
                }
            }
//递归二进制搜索
公共布尔二进制搜索(int[]列表,int目标,int低,int高){
列表={“1,2,5,7,9,15”};
目标=5;
布尔结果=二进制搜索(list,target,0,list.length-1);
执行++;
int mid=(低+高)/2;
如果(!结果){
System.out.println(“未找到目标--错误搜索”);
}否则{
System.out.println(“找到目标——搜索成功!”);
}    
如果(列表[mid]==目标){
返回true;
}否则{
如果(低>高){
返回false;
}否则{
比较++;
如果(列出[mid]<目标){
返回二进制搜索(列表、目标、中+1、高);
}否则{
返回二进制搜索(列表、目标、低、中-1);
}
}
下面是完整的代码:

public class Problem2 {
    public static int executions = 0;
    public static int comparisons = 0;
    public static int[] numbers = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

    public static void main(String[] args) {
        System.out.println("2nd fibonacci number: " + fibonacci(2));
        System.out.println("Number of executions: " + executions);
        System.out.println("Number of comparisons: " + comparisons);
        executions = 0;
        comparisons = 0;
        System.out.println();

        System.out.println("Number of operations: " + executions);
        System.out.println("Number of comparisons: " + comparisons);
        executions = 0;
        comparisons = 0;
        System.out.println();

        System.out.println("Factorial of 7: " + nFactorial(7));
        System.out.println("Number of operations: " + executions);
        System.out.println("Number of comparisons: " + comparisons);
        executions = 0;
        comparisons = 0;
    }
    //recursive Nfactorial
    public static int nFactorial(int n) {
        comparisons++;
        if (n <= 1) {
            return 1;
        } else {
            executions++;
            return n * nFactorial(n - 1);
        }
    }

    //recursive fibonacci number
    public static int fibonacci(int n) {
        comparisons++;
        if (n == 0) {
            return 0;
        } else if (n == 1) {
            return 1;
        } else {
            executions++;
            return fibonacci(n - 1) + fibonacci (n - 2);
        }
    }
    //recursive binary search
    public boolean binarySearch(int[] list, int target, int low, int high) {
        list ={"1,2,5,7,9,15"}; 
        target = 5;
        boolean result = binarySearch(list, target, 0, list.length-1);

        executions++;
        int mid = (low + high) / 2;

        if(!result){
            System.out.println("Target not found -- bad search.");
        }else{
            System.out.println("Target found -- sucessful search!");
        }    
        if (list[mid] == target) {
            return true;
        } else {
            if (low > high) {
                return false;
            } else {
                comparisons++;
                if (list[mid] < target) {
                    return binarySearch(list, target, mid + 1, high);
                } else {
                    return binarySearch(list, target, low, mid - 1);
                }
            }
        }    
    }
}
公共类问题2{
公共静态int执行=0;
公共静态整数比较=0;
公共静态int[]数字=新int[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
公共静态void main(字符串[]args){
System.out.println(“第二个斐波那契数:+斐波那契(2));
System.out.println(“执行次数:+执行次数”);
System.out.println(“比较次数:”+比较);
执行=0;
比较=0;
System.out.println();
System.out.println(“操作数:“+执行数”);
System.out.println(“比较次数:”+比较);
执行=0;
比较=0;
System.out.println();
System.out.println(“7的阶乘:+nFactorial(7));
System.out.println(“操作数:“+执行数”);
System.out.println(“比较次数:”+比较);
执行=0;
比较=0;
}
//递归工厂
公共静态内部工厂(内部n){
比较++;
如果(n高){
返回false;
}否则{
比较++;
如果(列出[mid]<目标){
返回二进制搜索(列表、目标、中+1、高);
}否则{
返回二进制搜索(列表、目标、低、中-1);
}
}
}    
}
}
如果可以,请提供帮助。如果您发现任何其他错误,请告诉我。

问题
list={“1,2,5,7,9,15”};
上面的语句在java中用于初始化int数组是无效的

修理 使用作为输入传递的数组

注 初始化数组的正确方法是
newint[]{1,2,5,7,9,15};

可能的解决办法
boolean二进制搜索(int[]arr,final int left,final int right,final int target){
如果(左>右){
返回false;
}
最终整数中间=左+(右-左)/2;
如果(arr[mid]==target){//如果匹配,则返回true
返回true;
}否则,如果(arr[mid]
调用 使用各自的参数从main方法调用二进制搜索方法

publicstaticvoidmain(字符串[]args){
binarySearch(numbers,0,numbers.length-1,5);//查找5
}

不幸的是,您的问题表明您缺少一些非常基本的概念,这些概念很难在本论坛的问答形式中解释。我建议您学习标准Java教程(例如如果您有特定的问题,请回到这里。@zaibeh,正如AKSSingh所指出的,您的初始化不正确。另一方面,您不应该在二进制搜索函数中初始化。您应该以正确的方式重用传递给函数的输入数组和目标值:
list=new int[]{1,2,5,7,9,15};
但是,由于代码中存在逻辑缺陷,这样做将导致进一步的错误。请检查@Horse answer以了解正确的逻辑。请访问此链接以了解有关如何在Java中声明和初始化数组的更多信息。请阅读第一个答案中的前两条注释,因为它们包含与您的问题类似的信息。您可以添加
list=new int[]{1,2,5,7,9,15};
作为另一个替代解决方案。@AKSingh,谢谢你的建议。实际上在原始代码中,OP不应该重新初始化数组,应该按原样重用输入数组。更新的答案:)是的。递归失败。我将更新我的注释。谢谢你指出这一点。