我正在尝试制作堆栈。我在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;
}
}
答案 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,它不是由一般键输入触发的 这就是这段代码永远等待的原因。