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 永远等待的原因。
我正在尝试堆叠。我在 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 永远等待的原因。