当hasNextInt()遇到输入结束时,Java突然终止
我在试着做一堆。我在Eclipse中使用了调试工具,发现当当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
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;
}
}