我在第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);
}
}
答案 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)的值;你可以在条件检查后返回;