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

当hasNextInt()遇到输入结束时,Java突然终止,java,stack,java.util.scanner,terminate,Java,Stack,Java.util.scanner,Terminate,我在试着做一堆。我在Eclipse中使用了调试工具,发现当hasnetint()遇到输入结束时,代码终止。下面的代码终止于代码的第14个while循环和第18个语句if(sc.hasnetint()){。我也考虑了JVM内存,但这段代码不是递归的,数组的大小只有20 这里是输入,我复制并粘贴到控制台上(最后一个“top”不起作用。)>> 这是代码>> import java.util.Scanner; public class User_Stack { final static int

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

这里是输入,我复制并粘贴到控制台上(最后一个“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;
    }
}
import java.util.Scanner;
公共类用户栈{
最终静态整数大小=20;
静态int[]数组=新int[SIZE];
静态int,其中=-1;
公共静态void main(字符串[]args){
字符串测试;int输入=0,结果=0,tc=1;
扫描仪sc=新的扫描仪(System.in);
/*输入测试用例的数量*/
int test_case=sc.nextInt();

而(tc这是因为
扫描器
等待下一个输入标记,以知道它是否是
整数
,当它到达输入的末尾时,它会一直等待。您应该将
sc.nextInt()
直接移动到
推送中,作为下一步:

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;
    }
}
while(tc正在解释为什么我们不能在while循环中使用.hasNextInt()。
Java scanner类方法.hasNextInt()不会在输入结束前停止。
.hasNextInt()的输入结尾为^Z,这不是由常规键输入触发的。
这就是该代码导致while永远等待的原因。

添加if(sc.hasNext)可能没有帮助。。谢谢!!我认为扫描仪无法等待下一次输入。我会试试!是的,我担心if(sc.hasNextInt())对您的情况没有帮助。
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;
    }
}