首页 / JAVA / Java Scanner不等待输入
Java Scanner不等待输入
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java Scanner不等待输入,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2694字,纯文字阅读大概需要4分钟。
内容图文
![Java Scanner不等待输入](/upload/InfoBanner/zyjiaocheng/756/bd8469eea66c4463943ae3e7d0749b02.jpg)
我这里有两个代码块.一个扫描器正确地等待用户输入,另一个扫描器正好通过它并调用nextInt(),它返回NoSuchElementException.这是有效的块:
public void startGame() {
out.println("Player1: 1 for dumb player, 2 for smart player, 3 for human player.");
Scanner scan = new Scanner(System.in);
p = scan.nextInt();
if (p == 1)
p1 = new DumbPlayer("ONE");
if (p == 2)
p1 = new SmartPlayer("ONE");
else
p1 = new HumanPlayer("ONE");
out.println("Player2: 1 for dumb player, 2 for smart player, 3 for human player.");
p = scan.nextInt();
if (p == 1)
p2 = new DumbPlayer("TWO");
if (p == 2)
p2 = new SmartPlayer("TWO");
else
p2 = new HumanPlayer("TWO");
scan.close();
这里的块不是:
public int findBestMove(Set<Integer> moves, Board b) {
Set<Integer> set = new HashSet<Integer>();
out.println("Player " +name+ ", select a column from 1-7: ");
Scanner scan = new Scanner(System.in); <--here it should wait for input, but does not!
int move = scan.nextInt(); <-- NoSuchElementException
scan.close();
for (int x = 1; x <= 7; x++) {
set.add(move);
move += 7;
}
....etc
这两个都是单独的类,并且在另一个类中从main方法调用.基本上main()调用startGame(),后者又调用某些Player类的findBestMove()方法……这是非工作代码所在的位置.在程序中是否有时候不适合接受输入?我的印象是,无论何时我想要用户输入,我都可以使用这种方法.谢谢!
解决方法:
根据java.util.Scanner javadoc,如果此流实现Closeable接口,Scanner.close()将关闭关联的流. java.lang.System.in是一个InputStream,它实现了Closeable接口.因此,在与System.in关联的扫描程序上调用Scanner.close()之后,System.in流将关闭,不再可用.
以下SSCCE适合我.我已从问题中删除了一些与实际问题无关的代码.请注意,使用此方法,虽然它可以工作,但Eclipse会向我发出警告“资源泄漏:’扫描’永远不会关闭”,因此更好的解决方案是仅使用一个Scanner实例.
package com.example;
import java.util.Scanner;
import java.util.Set;
import static java.lang.System.out;
public class ScannerTest {
int p = 0;
String name = "Test";
public void startGame() {
out.println("Player1: 1 for dumb player, 2 for smart player, 3 for human player.");
Scanner scan = new Scanner(System.in);
p = scan.nextInt();
out.println("Result1: " + p);
out.println("Player2: 1 for dumb player, 2 for smart player, 3 for human player.");
p = scan.nextInt();
out.println("Result2: " + p);
// scan.close(); // Do not close the Scanner to leave System.in open
}
public int findBestMove(Set<Integer> moves, Object /*Board*/ b) {
out.println("Player " +name+ ", select a column from 1-7: ");
Scanner scan = new Scanner(System.in);
int move = scan.nextInt();
// scan.close(); // Do not close the Scanner to leave System.in open
out.println("Move: " + move);
return 0;
}
public void run() {
startGame();
findBestMove(null, null);
}
public static void main(String[] args) {
ScannerTest st = new ScannerTest();
st.run();
}
}
内容总结
以上是互联网集市为您收集整理的Java Scanner不等待输入全部内容,希望文章能够帮你解决Java Scanner不等待输入所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。