繁体   English   中英

程序不会继续使用下一个方法

[英]Program won't move on to next methods

我正在尝试编写一个程序,让用户输入一个数字,然后输出第一个数字,最后一个数字以及该数字中的数字。 我的问题是程序将在Input方法中要求输入,但它一直在要求输入,而从未继续进行下一个方法。 任何帮助将非常感激。

private static String number;
private static String x;
private static int argument;
public static int Input()//Takes the user's input
{
   Scanner in=new Scanner(System.in);
   System.out.println("Please input a number");
   argument=in.nextInt();
   number=Integer.toString(argument);
   x=number.substring(0);
   return Input();
}
public static int firstDigit()//Returns the first digit
{
    System.out.println(number.substring(0,1));
    return firstDigit();
}
public static int lastDigit ()//Returns the last digit
{
    int a=number.length();
    System.out.println(number.substring(a-1,a));
    returnn lastDigit();
}
public static  int Digits ()//Returns the number of digits
{
    int a=number.length();
    System.out.println(a);
    return Digits();
}
public static void main(String[]args)
{       
   Input();
   firstDigit();
   lastDigit();
   Digits();
}

}

您的Input()方法始终在末尾递归调用自身。 不要那样做,不要在内部调用方法。

public static int input()//Takes the user's input
{
   Scanner in=new Scanner(System.in);
   System.out.println("Please input a number");
   argument=in.nextInt();
   number=Integer.toString(argument);
   x=number.substring(0);
   return Input();  // ***** recursion here *****
}

而是返回数字,参数。

public static int input()//Takes the user's input
{
   Scanner in=new Scanner(System.in);
   System.out.println("Please input a number");
   argument=in.nextInt();
   number=Integer.toString(argument);
   x=number.substring(0);
   return argument;
}

或更妙的是,使其无效并使其不返回任何内容 ,因为您似乎对任何方法的返回值都没有做任何事情。

public static void input()//Takes the user's input
{
   Scanner in=new Scanner(System.in);
   System.out.println("Please input a number");
   argument=in.nextInt();
   number=Integer.toString(argument);
   x=number.substring(0);
}
  • 注意:所有方法名称都应以小写字母开头,因此input()...而不是Input()。
  • 注意2:按照Dukeling的方法,由于所有方法都存在相同的问题,因此需要对所有方法进行类似的修复。

您的Input()函数在最后调用自己:

return Input();

那是递归的,并且由于它本身没有其他“返回”,它将继续调用自身。

public static int Input()//Takes the user's input  {    <----\
   Scanner in=new Scanner(System.in);                         |
   System.out.println("Please input a number");               |
                                                              |
   ...                                                        |
                                                              |
   return Input();                                 ----------/
}

永永远远。 必须发生某些改变。 考虑类似

public static int iNumbersEntered = 0;

public static int Input()//Takes the user's input  {    
   Scanner in=new Scanner(System.in);                        
   System.out.println("Please input a number");
   iNumbersEntered++;

   ...                                                        

   if(iNumbersEntered < 3)  {
      return Input();
   }  else  {
      getTheInformation...();
   }
}

在Input()方法的最后,执行“ return Input();”,这将导致无限循环。

看你的代码

public static int Input()//<=== you are entering the method here
{
   Scanner in=new Scanner(System.in);
   System.out.println("Please input a number");
   argument=in.nextInt();
   number=Integer.toString(argument);
   x=number.substring(0);
   return Input(); <=== you are entering the same method again!
}

您实际上在做的事情称为递归,并且您在调用完全相同的方法。

这是正确的代码:

public static int Input()
{
   Scanner in=new Scanner(System.in);
   System.out.println("Please input a number");
   argument=in.nextInt();
   number=Integer.toString(argument);
   x=number.substring(0);
   return number; 
}

正如其他张贴者所建议的那样,您可以通过再次调用该方法来返回,这将导致无限循环。

这是正确的方法:

public static int input()
{
   Scanner in=new Scanner(System.in);
   System.out.println("Please input a number");
   argument=in.nextInt();
   number=Integer.toString(argument);
   x=number.substring(0);
   return x; 
}

然后,您应该在其他方法中将返回值用作参数:

public static void main(String[]args)
{       
   int input = input();
   firstDigit(input);
   lastDigit(input);
   digits(input);
}

当然,这意味着您还可以更改其他方法以接受int作为参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM