System.in是提供用户输入数据的"标准"输入流.关闭后,无法重新打开此流.一个这样的例子是在使用扫描仪读取用户输入的情况下如下:
public class Test {
public static void main(String[] args) {
boolean finished;
do {
Scanner inputScanner = new Scanner(System.in);
finished = inputScanner.hasNext("exit");
boolean validNumber = inputScanner.hasNextDouble();
if (validNumber) {
double number = inputScanner.nextDouble();
System.out.print(number);
} else if (!finished) {
System.out.println("Please try again.");
}
inputScanner.close();
} while (!finished);
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,Scanner创建了一个类型实例,用于从用户读取一系列数字(请忽略此代码的其他详细信息,超出此示例的范围,我知道应在循环外创建并关闭扫描程序).在从用户输入检索到数字之后Scanner,关闭该实例(即,输入流).但是,当从用户请求另一个号码并创建新实例时,无法再次打开输入流.在这个例子的情况下,它创建一个无限循环.
问题是:为什么不能重新打开封闭的流?
我创建了一个简单的java"echo"应用程序,它接受用户的输入并将其显示给他们以演示该问题.我可以使用IntelliJ的内部"运行"命令,以及执行由...生成的编译的java文件时运行此应用程序gradle build.但是,如果我尝试使用执行应用程序gradle run,我会从扫描程序中抛出NoSuchElementException.
我认为gradle或应用程序插件特别对系统IO做了一些奇怪的事情.
应用
package org.gradle.example.simple;
import java.util.Scanner;
public class HelloWorld {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
String response = input.nextLine();
System.out.println(response);
}
}
Run Code Online (Sandbox Code Playgroud)
的build.gradle
apply plugin: 'java'
version '1.0-SNAPSHOT'
apply plugin: 'java'
jar {
manifest {
attributes 'Main-Class': 'org.gradle.example.simple.HelloWorld'
}
}
apply plugin: 'application'
mainClassName = "org.gradle.example.simple.HelloWorld"
sourceCompatibility = 1.5
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}
Run Code Online (Sandbox Code Playgroud)
有关如何使用此应用程序的任何想法gradle run?
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");
}
}
Run Code Online (Sandbox Code Playgroud)
使用整数时没有错误,但如果我使用带有点的数字则会出现错误.
$ javac Averager.java; java Averager
0.5
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextDouble(Scanner.java:2387)
at Averager.unlimited(Averager.java:12)
at Averager.main(Averager.java:21)
Run Code Online (Sandbox Code Playgroud)
据我所知,0.5应该用双倍覆盖.如果不是,请有人纠正我.
我试图从链表中删除特定节点.我试图调用我的方法removeNode,但是当我调用它来获取用户输入时它给了我这个错误.任何关于如何解决这个问题的建议将不胜感激!
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at LinkedList.removeNode(LinkedList.java:123)
at fileIn.<init>(fileIn.java:22)
at fileIn.main(fileIn.java:13)
Run Code Online (Sandbox Code Playgroud)
LinkedList类:
import java.util.Scanner;
public class LinkedList {
public LinkedListNode front;
public LinkedList() {
this.front = null;
}
public void insertBack(String data)
{
if(front == null){
front = new LinkedListNode(data);
}
else{
LinkedListNode newNode = new LinkedListNode(data);
LinkedListNode current = front;
while(current.getNext() != null){
current = current.getNext();
}
current.setNext(newNode);
}
}//end insertBack
public void addAfter(LinkedListNode spot, String data)
{
LinkedListNode newNode;
newNode = …Run Code Online (Sandbox Code Playgroud) 我目前正在用图论编写我的学士论文,并使用java扫描器将带边的txt文件转换为我的Java类图.我的txt文件如下所示:
1 2 72 3
2 3 15 98
4 7 66 49
5 6 39 48
6 9 87 97
8 13 31 5
整数排序为:源顶点,汇点顶点,成本,容量.
我的代码如下:
Graph graph = new Graph(false);
File f = new File("Filepath");
Scanner in = new Scanner(f);
while (in.hasNextLine())
{
for (int i =1; i<= numberEdges; i++)
{
String s = in.nextLine();
try (Scanner inscan = new Scanner(s)) {
while (inscan.hasNext())
{
int source = inscan.nextInt();
int sink = inscan.nextInt();
double cost =inscan.nextDouble();
double capacity …Run Code Online (Sandbox Code Playgroud)