Tag: java.util.scanner

如何中断java.util.Scanner nextLine调用

我正在使用multithreading环境,一个Thread通过反复调用scanner.nextLine()来不断监听用户输入。 要结束应用程序,此runloop由另一个线程停止,但是在最后一次用户输入之前,监听线程不会停止(由于nextLine()的阻塞性质)。 关闭流似乎不是一个选项,因为我从System.in读取,它返回一个不可关闭的InputStream 。 有没有办法打断扫描仪的阻塞,以便它会返回? 谢谢

扫描仪永远不会关闭

我正在开发一款游戏,我的扫描仪遇到了一些问题。 我的资源泄漏扫描仪从未关闭。 但我以为我的扫描仪在没有关闭它之前就已经工作了。 但现在不是。 有人可以帮帮我吗? import java.util.Scanner; public class Main { public static final boolean CHEAT = true; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int amountOfPlayers; do { System.out.print(“Select the amount of players (1/2): “); while (!scanner.hasNextInt()) { System.out.println(“That’s not a number!”); scanner.next(); // this is important! } amountOfPlayers = […]

如何使用Java Scanner测试空白行?

我希望用扫描仪输入,直到没有任何东西(即当用户输入空行时)。 我该如何实现这一目标? 我试过了: while (scanner.hasNext()) { // process input } 但那会让我陷入困境

当我输入double时,nextDouble()会抛出exception

import java.util.*; class Averager { public static double unlimited() { int count = 0; double sum = 0; Scanner scan = new Scanner(System.in); while(scan.hasNext()) { double d = scan.nextDouble(); sum += d; count++; } double ave = sum/count; return ave; } public static void main(String[] args) { System.out.println(unlimited()+”\n”); } } 使用整数时没有错误但如果我使用带有点的数字则会出现错误。 $ javac Averager.java; java […]

Scanner#nextFloat的奇怪行为

在Eclipse中运行以下操作最初导致Scanner无法识别控制台中的回车,从而有效阻止了进一步的输入: price = sc.nextFloat(); 在代码之前添加此行会导致Scanner接受0,23(法语表示法)作为浮点数: Locale.setDefault(Locale.US); 这很可能是由于Windows XP Pro(法语/比利时语)中的区域设置。 当代码再次运行时,仍然接受0,23并输入0.23会导致它抛出java.util.InputMismatchException 。 有关为什么会发生这种情况的任何解释? 还有一个解决方法或我应该使用Float#parseFloat ? 编辑:这演示了扫描程序如何使用不同的语言环境(在开头取消注释其中一行)。 import java.util.Locale; import java.util.Scanner; public class NexFloatTest { public static void main(String[] args) { //Locale.setDefault(Locale.US); //Locale.setDefault(Locale.FRANCE); // Gives fr_BE on this system System.out.println(Locale.getDefault()); float price; String uSDecimal = “0.23”; String frenchDecimal = “0,23”; Scanner sc = new Scanner(uSDecimal); try{ price […]

Java扫描程序不会遍历整个文件

我正在用Java编写程序,我需要做的一件事就是为最短路径问题创建一组每个有效位置。 这些位置在.txt文件中定义,该文件遵循严格模式(每行一个条目,没有额外的空格),非常适合使用.nextLine来获取数据。 我的问题是文件中的241行(432中的一行)扫描仪在通过条目的3/4处停止工作并且不识别任何新行。 我的代码: //initialize state space private static Set posible(String posLoc) throws FileNotFoundException { Scanner s = new Scanner(new File(posLoc)); Set result = new TreeSet(); String availalbe; while(s.hasNextLine()) { availalbe = s.nextLine(); result.add(availalbe); } s.close(); return result; } 数据 Shenlong Gundam Altron Gundam Tallgee[scanner stops reading here]se Tallgeese II Leo (Ground) Leo (Space) 当然,“扫描仪在这里停止读取”不在数据中,我只是标记扫描仪停止读取文件的位置。 […]

hasNext() – 什么时候阻止,为什么?

我正在尝试通过Scanner对象读取命令。 为了检查输入语法,我使用sc.hasNext() (对于缺少命令的情况)。 它已经很好地适用于许多情况,但现在我已经在JavaAPI中描述为“可以阻塞并等待输入”的情况。 hasNext()方法何时阻止,我该如何控制它? 有趣的事情是它在块之前的3个案例中完美地工作。 此外,JavaAPI将hasNext()描述为检查是否存在另一个Input的正确方法,以便Method next()不会产生Exception 。 这是我到目前为止所做的代码: if (sc.hasNext() && sc.next().equals(“create”)) { if (sc.hasNextInt()) { width = sc.nextInt(); if (width > 0) { if (sc.hasNextInt()) { heigth = sc.nextInt(); if (heigth > 0) { if (sc.hasNext()) { //At this point the hasNext Statement blocks for //no reason till an Input is made. […]

线程“main”中的exceptionjava.io.FileNotFoundException:错误

我正在使用Eclipse来编译和运行我的java代码。 这是我得到的错误。 Exception in thread “main” java.io.FileNotFoundException: file.txt (The system cannot find the file specified) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.(Unknown Source) at java.util.Scanner.(Unknown Source) at helloworld.main(helloworld.java:9) 这是我的代码 import java.io.File; import java.io.IOException; import java.util.Scanner; public class helloworld { public static void main(String[] args) throws IOException { Scanner KB = new Scanner(new File(“file.txt”)); while (KB.hasNext()) { String […]

while循环中的扫描仪输入validation

我必须在while循环中显示Scanner输入:用户必须插入输入,直到他写“退出”。 所以,我必须validation每个输入以检查他是否写“退出”。 我怎样才能做到这一点? while (!scanner.nextLine().equals(“quit”)) { System.out.println(“Insert question code:”); String question = scanner.nextLine(); System.out.println(“Insert answer code:”); String answer = scanner.nextLine(); service.storeResults(question, answer); // This stores given inputs on db } 这不起作用。 如何validation每个用户输入?

扫描仪从文件中跳过每隔一行

我正在尝试扫描文本文件并将每一行放入一个arraylist,并在下一行是’*’时停止扫描,但是,我的arraylist存储每一行​​,我不知道为什么。 Scanner scan = new Scanner(new File(“src/p/input2.txt”)); ArrayList words = new ArrayList(); while(scan.hasNextLine()) { if(scan.nextLine().equals(“*”)) break; words.add(scan.nextLine()); } 文本文件: 1 dip lip mad map maple may pad pip pod pop sap sip slice slick spice stick stock * spice stock may pod 什么存储在我的arraylist中: [浸,疯,枫,垫,豆荚,树液,切片,香料,股票]