为什么我的java方法在多次运行时表现不同?

为什么我的java方法在多次运行时表现不同?,java,methods,Java,Methods,当下面的方法checkUserInput()只调用一次时(当用户的第一个条目是1到3之间的数字时),它工作正常 但是,当多次调用该方法时,它会按预期打印出正确的错误消息,然后重新运行“Enter”。然而,当用户在此时输入一个从1到3的数字时,程序的运行方式会有所不同:它不会将数字识别为数字,或者它不会通过减去一来转换数字,或者它会结束并再次运行 原因可能是什么 静态列表checkUserInput(){ 系统输出打印(“输入:”); int g=0,h=0; 布尔数字=真; 布尔数a=真; 扫描

当下面的方法
checkUserInput()
只调用一次时(当用户的第一个条目是1到3之间的数字时),它工作正常

但是,当多次调用该方法时,它会按预期打印出正确的错误消息,然后重新运行“Enter”。然而,当用户在此时输入一个从1到3的数字时,程序的运行方式会有所不同:它不会将数字识别为数字,或者它不会通过减去一来转换数字,或者它会结束并再次运行

原因可能是什么

静态列表checkUserInput(){
系统输出打印(“输入:”);
int g=0,h=0;
布尔数字=真;
布尔数a=真;
扫描仪=新的扫描仪(System.in);
int-xAxis=0,yAxis=0,a=0,r=0;
字符串m=scanner.next();
试一试{
yAxis=整数.parseInt(m);
}捕获(数字格式){
数字=假//
}
如果(!数字){
System.out.println(“仅限数字!”;//排除字母
checkUserInput();
}
字符串n=scanner.next();
试一试{
xAxis=Integer.parseInt(n);
}捕获(数字格式){
数值=假//
}
如果(!numera){
System.out.println(“仅限数字!”;//排除字母
checkUserInput();
}如果(xAxis<1 | | xAxis>3 | | yAxis<1 | | yAxis>3){
System.out.println(“仅限1到3!”);
checkUserInput();
}否则{
//通过所有测试的输入可以继续
//将数组索引指定给相应的坐标
g=yAxis-1;
h=xAxis-1;
}
cords=新的ArrayList();
添加(g);
添加(h);
返回线;
}
checkUserInput()

您似乎认为这会将执行重置回开始。不,它不是-java方法是可重入的。它将运行checkUserInput方法的另一个“副本”,一旦返回,它将继续运行。因此,如果第一个
scanner.next()
调用返回一个非数字值,则“仅限数字!”错误处理块将再次运行整个方法,一旦整个方法完成,将继续在
String n=scanner.next()
,导致混乱

这也意味着,如果你输入错误的次数足够多,你的代码就会爆发出StackOverflower错误

我强烈建议您不要调用自己的方法。改为使用(do/)while循环

checkUserInput()

您似乎认为这会将执行重置回开始。不,它不是-java方法是可重入的。它将运行checkUserInput方法的另一个“副本”,一旦返回,它将继续运行。因此,如果第一个
scanner.next()
调用返回一个非数字值,则“仅限数字!”错误处理块将再次运行整个方法,一旦整个方法完成,将继续在
String n=scanner.next()
,导致混乱

这也意味着,如果你输入错误的次数足够多,你的代码就会爆发出StackOverflower错误


我强烈建议您不要调用自己的方法。改用(do/)while循环。

我强烈建议您学习如何调试程序,这将有助于您了解其工作原理。我强烈建议您学习如何调试程序,这将有助于您了解其工作原理。我尝试改用“do while”循环,但程序仍然没有按预期运行。它不遵守“do{}”中的条件语句,随后的输出会随着第一个输入的内容而变化,然后您就有了一个全新的、全新的bug。编程很难,所有这些。我建议你问一个新问题。请确保粘贴所有代码。我尝试使用“do while”循环,但程序仍不能按预期运行。它不遵守“do{}”中的条件语句,随后的输出会随着第一个输入的内容而变化,然后您就有了一个全新的、全新的bug。编程很难,所有这些。我建议你问一个新问题。确保粘贴所有代码。