相关疑难解决方法(0)

为什么不能重新打开封闭(标准)流?

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

26
推荐指数
2
解决办法
8213
查看次数

使用gradle run启动应用程序时,java.util.scanner会抛出NoSuchElementException

我创建了一个简单的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

java stdin gradle java.util.scanner build.gradle

10
推荐指数
1
解决办法
2376
查看次数

当我输入double时,nextDouble()抛出一个InputMismatchException

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应该用双倍覆盖.如果不是,请有人纠正我.

java java.util.scanner

7
推荐指数
1
解决办法
1万
查看次数

线程"main"中的异常java.util.NoSuchElementException:未找到行 - 使用扫描程序输入

我试图从链表中删除特定节点.我试图调用我的方法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 input linked-list nodes

5
推荐指数
1
解决办法
3万
查看次数

读取多行中的多个整数

我目前正在用图论编写我的学士论文,并使用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)

java java.util.scanner

5
推荐指数
2
解决办法
1595
查看次数