我的代码在return语句中出错

时间:2011-12-21 13:19:00

标签: java

我在第16行收到return语句的错误。

如何解决这个问题?

import java.util.Scanner;
class abc 
{
    String str;
     Scanner sc=new Scanner(System.in);
    int mid(int l,int h)
    {
         System.out.println((l+h)/2);
        str=sc.nextLine();
        if(str.indexOf('L')==0)
            mid(((l+h)/2+1),h);
        else if(str.indexOf('H')==0)
            mid(l,((l+h)/2)-1);
        else if(str.indexOf('w')==0)
           return 1;
    }


}
public class Main {
    public static void main(String[] args){
     int a,b;
     abc o;
     Scanner in=new Scanner(System.in);
     a=in.nextInt();
     b=in.nextInt();
     o.mid(a,b);
    }
}

5 个答案:

答案 0 :(得分:4)

您需要在所有控制路径上return

int mid(int l,int h)
{
    System.out.println((l+h)/2);
    str=sc.nextLine();
    if(str.indexOf('L')==0)
        return mid(((l+h)/2+1),h); //add return statement here
    else if(str.indexOf('H')==0)
        return mid(l,((l+h)/2)-1); //and here
    else if(str.indexOf('w')==0)
        return 1;
}

答案 1 :(得分:3)

查看内联评论

int mid(int l,int h)
    {
         System.out.println((l+h)/2);
        str=sc.nextLine();
        if(str.indexOf('L')==0)
            mid(((l+h)/2+1),h);
            //you will not be returnung anything in this condition
        else if(str.indexOf('H')==0)
            mid(l,((l+h)/2)-1);
            //you will not be returnung anything in this condition
        else if(str.indexOf('w')==0)
           return 1;
    }

答案 2 :(得分:3)

问题是你的if只返回三个可能结果中的一个的值,但是编译器希望你总是返回一个int。

int mid(int l,int h)
{
    System.out.println((l+h)/2);
    str=sc.nextLine();
    if(str.indexOf('L')==0)
        return mid(((l+h)/2+1),h);
    else if(str.indexOf('H')==0)
        return mid(l,((l+h)/2)-1);
    else if(str.indexOf('w')==0)
       return 1;
}

答案 3 :(得分:0)

你的函数假设返回一个int,它就是声明     int mid(int l,int h)

意味着,它是一个函数,它将2个int作为输入并返回另一个int。

现在,如果你查看你的代码有3个执行路径,但只有一个会返回一些东西(返回1;) 所以你必须在另一条执行路径中放回一个。

答案 4 :(得分:0)

检查条件

时,您没有返回值
   int mid(int l,int h)
    {
        System.out.println((l+h)/2);
        str=sc.nextLine();
        int a;

        if(str.indexOf('L')==0)
            a= mid(((l+h)/2+1),h);//add return statement
        else if(str.indexOf('H')==0)
           a= mid(l,((l+h)/2)-1); //add return statement
        else if(str.indexOf('w')==0)
           a=1;

return a;
    }

你也可以做一件事。你可以存储int value = mid(((l + h)/ 2 + 1),h)的值;你可以在条件检查后返回;