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

plicqrtu  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(324)

当这个方法 checkUserInput() 下面只调用一次(当用户的第一个条目是1到3之间的数字时),就可以了。
但是,当方法被多次调用时,它会按预期打印出正确的错误消息,然后重新运行“enter”。然而,当用户在这一点上输入1到3之间的数字时,程序的运行方式就不同了:它不能将数字识别为数字,或者它不能通过减去1来转换数字,或者它到达末尾并再次运行。
原因是什么?

static List checkUserInput() {
    System.out.print("Enter: ");
    int g = 0, h = 0;
    boolean numeric = true;
    boolean numera = true;
    Scanner scanner = new Scanner(System.in);
    int xAxis = 0, yAxis = 0, a = 0, r = 0;
    String m = scanner.next();

    try {
        yAxis = Integer.parseInt(m);
    } catch (NumberFormatException e) {
        numeric = false; //
    }

    if (!numeric) {
        System.out.println(" numbers only!"); //exclude letters
        checkUserInput();
    }

    String n = scanner.next();

    try {
        xAxis = Integer.parseInt(n);
    } catch (NumberFormatException e) {
        numera = false; //
    }

    if (!numera) {
        System.out.println(" numbers only!"); //exclude letters
        checkUserInput();
    } else if (xAxis < 1 || xAxis > 3 || yAxis < 1 || yAxis > 3) { 
        System.out.println("1 to 3 only!");
        checkUserInput();
    } else {
        //inputs that pass all tests can proceed
        //assign array indices to respective coordinates
        g = yAxis - 1;
        h = xAxis - 1;
    }

    cords = new ArrayList<Integer>();
    cords.add(g);
    cords.add(h);
    return cords;
}
holgip5t

holgip5t1#

checkUserInput(); 你似乎认为这会让执行重新回到起点。不,它没有-java方法是可重入的。它将运行checkuserinput方法的另一个“副本”,一旦返回,它将继续运行。所以,如果第一个 scanner.next() call返回一个非数字值,即'numbers only!'错误处理块将再次运行整个方法,并且一旦整个方法完成,将在继续 String n = scanner.next() ,造成混乱。
这也意味着,如果你输入错误的次数足够多,你的代码将爆炸与StackOverflowerError。
我强烈建议你不要调用你自己的方法。改用(do/)while循环。

相关问题