Java 当 hasNextInt() 遇到输入结束时突然终止

Java abruptly terminates when hasNextInt() encountered the end of input

我正在尝试堆叠。我在 Eclipse 中使用调试工具,发现当 hasNextInt() 遇到输入结束时代码终止。下面的代码在第 14 个 while 循环和代码的第 18 个语句 if(sc.hasNextInt()) { 处终止。我也想过JVM内存,但是这段代码不是递归的,数组大小只有20!...

这里是输入,我复制粘贴到控制台(最后"top"没有运行..)>>

14 push 1 push 2 top size empty pop pop pop size empty pop push 3 empty top

这是代码>>

import java.util.Scanner;
public class User_Stack {
    final static int SIZE = 20;
    static int[] array = new int[SIZE];
    static int where = -1;

    public static void main(String[] args) {
        String test; int input=0, result=0, tc=1;
        Scanner sc = new Scanner(System.in);

        /*input the number of test cases*/
        int test_case = sc.nextInt();

        while(tc <= test_case){
            /*input what will do with Stack by String*/
            test = sc.next();
            /*what is pushed is input by Integer*/
            if(sc.hasNextInt()) {
                input=sc.nextInt();
            }
            /*call function by test String*/
            switch(test){
                case "push":
                    push(array, input);
                    break;
                case "pop":
                    System.out.println(pop(array));
                    break;
                case "size":
                    System.out.println(size(array));
                    break;
                case "empty":
                    System.out.println(empty(array));
                    break;
                case "top":
                    System.out.println(top(array));
                    break;
            }
        }

    }

    public static void push(int[] array, int x){
        if(where+1==SIZE) return;
        array[++where]=x;
    }
    public static int pop(int[] array){
        if(where==-1) return array[where--];
        else return -1;
    }
    public static int size(int[] array){
        return where+1;
    }
    public static int empty(int[] array){
        if(where==-1) return 1;
        else return 0;
    }
    public static int top(int[] array){
        if(where==-1) return array[where];
        else return -1;
    }
}

这是因为 Scanner 等待下一个输入标记以了解它是否是 integer,并且当它到达您输入的末尾时,它会永远等待。您应该将 sc.nextInt() 直接移动到 push 中,如下所示:

while(tc <= test_case){
    /*input what will do with Stack by String*/
    test = sc.next();

    /*call function by test String*/
    switch(test){
        case "push":
            push(array, sc.nextInt());
            break;
        case "pop":
            System.out.println(pop(array));
            break;
        case "size":
            System.out.println(size(array));
            break;
        case "empty":
            System.out.println(empty(array));
            break;
        case "top":
            System.out.println(top(array));
            break;
    }
}

this question 解释了为什么我们不能在 while 循环中使用 .hasNextInt()。
Java 扫描仪 class 方法 .hasNextInt() 在输入结束前不会停止。
.hasNextInt() 的输入结束是 ^Z ,它不是由一般按键输入触发的。
这就是这段代码导致 while 永远等待的原因。