我想输入一个接受1到10之间数字的输入并打印范围。
我需要检查输入是否为整数(检查),检查范围是否为0-10(检查),如果不是这些,请再次询问用户。那么,一个递归方法呢?
目前我有这个:
import java.util.Scanner;
import java.util.InputMismatchException;
public class FinalTest {
public static void main (String [] args) {
Scanner in = new Scanner(System.in);
int k = 0;
System.out.print("int - ");
try {
k = in.nextInt();
} catch (InputMismatchException e) {
System.out.println("ERR: Input");
System.exit(1);
}
if(k <= 10 && k > 0) {
for(int j=1; j <= k; j++) {
System.out.println(j);
}
} else {
System.out.println("ERR: Oob");
System.exit(1);
}
}
}
我想替换“System.exit()”,以便重新尝试再次询问用户输入。
调用main();
会产生错误。
在这种情况下如何正确调用main方法?
答案 0 :(得分:1)
这里有两个选择:
循环可以像:
boolean askForInput = true;
while ( askForInput ) {
try {
k = in.nextInt();
askForInput = false;
} catch ...
print "not a number try again"
}
但除此之外:仍然想要将此代码放入自己的方法中。不是因为代码应该调用自己,而是出于清晰的原因。像:
public static int askForNumber(Scanner in) {
... code from above
return k;
}
回答你的问题:你不想在这里使用递归。你想循环;是的,递归是实现循环的一种方法,但考虑到你想要在这里实现的要求,这简直是过度的。
并且为了记录:在创建帮助器方法时,您实际上可以将其简化为:
public static int askForNumber() {
while ( askForInput ) {
try ...
return in.nextInt();
} catch ...
print "not a number try again"
}
}
除此之外:您通常使用递归来计算计算任务,例如计算阶乘或斐波纳契数,...例如,请参阅here。
答案 1 :(得分:1)
用于打印范围的递归方法部分:
public void printAscending(int n) {
if (n > 0) {
printAscending(n - 1);
System.out.println(n);
}
}
答案 2 :(得分:1)
我认为使用递归对于简单而且可能更昂贵的东西来说太过分了。您可以在扫描位周围添加while循环,直到输入的值有效。我还会把打印循环放在一边,不必在打印前测试条件,因为如果你离开while循环,则表示数字有效。您可以只测试-1值以退出进程。
public class FinalTest
{
public static void main (String [] args)
{
Scanner in = new Scanner(System.in);
int k = 0;
do
{
System.out.print("int - ");
try
{
k = in.nextInt();
}
catch (InputMismatchException e)
{
System.out.println("ERR: Input");
System.exit(1);
}
}
while(!(k>0 && k<=10) && k!=-1);
if(k!=-1)
{
for(int j=1; j<=k; j++)
{
System.out.println(j);
}
}
else
{
System.out.println("Bye Bye.");
}
}
}
答案 3 :(得分:1)
好的,我个人在需要使用递归时所做的就是为它创建一个单独的函数/方法。当我需要重新启动方法时,我只是在其中调用它。所以它会是这样的:
private void recursiveMethod() {
// do stuff . . .
if (yourCondition) {
//continue to next piece of code
} else {
recursiveMethod();
}
}
但是在大项目中,尽量远离递归,因为如果你陷入困境,它可以