Java 内部调用方法
我想做一个输入,接受1-10之间的数字并打印范围 我需要检查输入是否为整数(检查),检查范围是否为0-10(检查),如果不是这些内容,请再次询问用户。那么,递归方法 目前我有:Java 内部调用方法,java,loops,recursion,methods,Java,Loops,Recursion,Methods,我想做一个输入,接受1-10之间的数字并打印范围 我需要检查输入是否为整数(检查),检查范围是否为0-10(检查),如果不是这些内容,请再次询问用户。那么,递归方法 目前我有: import java.util.Scanner; import java.util.InputMismatchException; public class FinalTest { public static void main (String [] args) { Scanner in = new
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);
}
}
}
import java.util.Scanner;
导入java.util.InputMismatchException;
公开课期末考试{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int k=0;
系统输出打印(“int-”);
试一试{
k=in.nextInt();
}捕获(输入不匹配异常e){
System.out.println(“错误:输入”);
系统出口(1);
}
if(k0){
对于(int j=1;j这里有两种选择:
- 实际上创建一个方法并调用它
- 简单地使用一个循环
循环可以是这样的:
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"
}
}
除此之外:您通常对计算任务使用递归,例如计算阶乘或斐波那契数,……请参见示例。有关打印范围的递归方法部分:
public void printAscending(int n) {
if (n > 0) {
printAscending(n - 1);
System.out.println(n);
}
}
我认为使用递归对于这么简单的东西来说太难了,而且可能会更昂贵。你可以在扫描位周围添加一个while循环,直到输入的值有效。我还可以将打印循环置于while之外,以便在打印之前不必测试条件,因为如果你脱离while循环,它意味着数字I可以只测试-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.");
}
}
}
公共类最终测试
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(系统输入);
int k=0;
做
{
系统输出打印(“int-”);
尝试
{
k=in.nextInt();
}
捕获(输入不匹配异常e)
{
System.out.println(“错误:输入”);
系统出口(1);
}
}
而(!(k>0&&k好的,所以我个人在需要使用递归时要做的是为它创建一个单独的函数/方法。当我需要重新启动该方法时,我只需在其内部调用它。所以它会是这样的:
private void recursiveMethod() {
// do stuff . . .
if (yourCondition) {
//continue to next piece of code
} else {
recursiveMethod();
}
}
但在大型项目中,尽量远离递归,因为如果你搞砸了,它可以我建议使用循环。你不需要递归。只需要使用循环。请参阅:将其固定在循环中。或者将逻辑放入函数并递归调用函数。值得的是,你可以为此使用递归方法,但不应该。aimple循环就足够了,while(没有有效的答案){ask for answer}
Yes循环:while(不正确){}嘿,感谢你的回答。非常有用。只有一件事-为什么这不起作用?boolean askForInput=true;while(askForInput){System.out.print(“int-”;试试{k=in.nextInt();askForInput=false;}catch(InputMismatchException e){System.out.println(“ERR:Input”);}
它只是一直在打印ERR。它不是每次都应该提示输入吗?这是pastebin url,为了便于阅读:@py9我遵循了该链接,并将其放入一个简单的main方法中…它打印“int-”…我输入一个数字,按enter键…程序结束。因此:请在那里放一个-我可以下载一个整体并运行它来重新处理问题。问题是当你不输入一个整数,而是一个字符串时。它不应该转到循环的开头并再次请求输入吗?(因为askForInput仍然是真的)。以下是完整的代码:@py9好的。我必须承认我只是对nextInt()的工作原理有错误的理解。因此,您可能希望继续使用以前的try/catch代码。老实说,我今天很忙,要开始自己用该扫描仪进行实验。