Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 内部调用方法_Java_Loops_Recursion_Methods - Fatal编程技术网

Java 内部调用方法

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

我想做一个输入,接受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);
    }
  }
}
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代码。老实说,我今天很忙,要开始自己用该扫描仪进行实验。