我有一个Java编程问题,我必须使用if语句的递归才能让这个程序工作。不幸的是,我不能使用循环,只会让这更难。
使用RECURSION编写此功能。 *询问用户输入低和高(含)之间的数字,读取它。 *保持阅读直到用户输入范围内的数字(包括)。使用回归
public static int readWithinRange(Scanner in, PrintStream out, int low, int high)
{
// notice I'm passing the Scanner and the PrintStream; do NOT read from
// System.in or write to System.out
out.println("Please enter a number.");
int number1=in.nextInt();
if (number1 <= low) {
return low;
} else if (number1 >= high) {
return high;
} else if (number1 >= low && number1 <= high){
return number1;
}
return number1;
/*return low;*/
}
以下是执行此方法的代码:
public void testReadWithinRange()
{
InputStream in = new ByteArrayInputStream( " 10 20".getBytes() );
PrintStream out=new PrintStream(new ByteArrayOutputStream());
Scanner in_s=new Scanner(in);
int ans=Assignment4.readWithinRange(in_s,out,15,25);
Assert.assertEquals(20, ans);
in_s=new Scanner(new ByteArrayInputStream( "10 20".getBytes() ));
ans=Assignment4.readWithinRange(in_s,out,10,20);
Assert.assertEquals(10, ans);
in_s=new Scanner(new ByteArrayInputStream( "10 20 21".getBytes() ));
Assert.assertEquals(21, Assignment4.readWithinRange(in_s,out,21,30));
}
@Grade(points=25)
@Test
非常感谢任何帮助,积分将得到回报!提前致谢
答案 0 :(得分:1)
从你的问题我怀疑你并不确定递归是什么。请阅读here以获取摘要。
一般来说,递归方法的形式如下:
func(value)
if value is base case
return result
else
combine result with func(simpler value)
在你的情况下,这将转化为:
int readWithinRange(int low, int high) {
int guess = in.nextInt();
if (guess >= low && guess <= high)
return guess;
else
return readWithinRange(low, high);
}
请注意,您的混淆也可能是因为这是教授递归的可怕的问题。它自然是迭代的,递归解决方案不能很好地反映问题。特别是,你的问题不需要结果,因为递归调用完成,这使得递归的使用完全没有意义。