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

时间:2014-01-30 13:46:06

标签: java

我正在尝试编写一个程序,用户输入一个数字,然后输出第一个数字,最后一个数字和该数字中的位数。我的问题是程序会在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();
}

}

6 个答案:

答案 0 :(得分:2)

你的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的说法,你需要给你的方法所有一个类似的修复,因为它们都有同样的问题。

答案 1 :(得分:1)

您的输入()函数在结尾调用自身:

return Input();

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

答案 2 :(得分:1)

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...();
   }
}

答案 3 :(得分:0)

在Input()方法结束时,你会'返回Input();',这会导致无限循环。

答案 4 :(得分:0)

查看您的代码

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; 
}

答案 5 :(得分:0)

正如其他海报所建议的那样,你通过再次调用该方法返回,这会导致无限循环。

这是正确的方法:

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作为参数。