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