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

时间:2016-05-22 16:23:58

标签: java stack java.util.scanner terminate

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

这是输入,我将其复制并粘贴到控制台(最后“顶部”不运行..)>>

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;
    }
}

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:0)

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