我的代码为我的扫描仪抛出错误,我不知道为什么。我的代码今天早上工作了,但是大多数代码都和main放在一个类中,我知道这是一种不好的编程方式,所以我将所有方法都移到了各自的类中,此后此错误就开始了。我什至无法输入任何数字之前,都会弹出错误提示。我的代码编译时没有错误或警告,我无法弄清楚。任何帮助将不胜感激。
public static Card trapCard(Player player, int pick) throws InterruptedException {
Scanner scan = new Scanner(System.in);
int i = 1;
Card choice = null;
int value = 0;
System.out.println("");
for(Card card : player.trap.cards) {
value = Arena.mySwitch(pick, card);
if(value>0) {
break;
}
}
if(value> 0) {
System.out.println("(0) No Card");
for(Card card: player.trap.cards) {
System.out.println("(" + i + ") "+card.name);
i++;
}
System.out.print("\nPick a trap card: ");
int x = 100;
while(x < 0 || x > player.trap.cards.size()) {
x = scan.nextInt();
System.out.print("\n");
if(x <0 || x > player.trap.cards.size() ) {
System.out.println("Invalid choice, pick again");
}
if(pick >= 0 || pick <= player.trap.cards.size()) {
break;
}
}
if(x == 0) {
choice = null;
}
else {
choice = player.trap.cards.get(x-1);
}
}
scan.close();
return choice;
}
答案 0 :(得分:0)
该解决方案已发表在评论中,因此我将在此处提及。
可能与您在扫描仪上调用close()有关。您应该始终关闭打开的资源,但扫描仪位于System.in上。您从未打开过System.in,而是由操作系统为您完成的。因此,也不是您要关闭它的地方,除非您知道为什么选择关闭它以达到您知道的效果(您现在显然还没有)。相反,您应该在一开始就在整个程序中的System.in上创建一个Scanner,并始终使用该唯一的Scanner。正如我所说,永远不要关闭它。 – kumesana