无法使用命令行参数将输入传递给 Java 程序中的多个方法

Unable to Pass input to multiple methods in a Java program using command line arguments

提问人:DilLip_Chowdary 提问时间:1/28/2023 最后编辑:HolgerDilLip_Chowdary 更新时间:4/28/2023 访问量:50

问:

我使用以下命令将输入传递给 java 程序:

java Main - <"input.txt" > "output.txt"

使用此方法时,输入仅由第一种方法 (main) 接收

代码

import java.util.Scanner;
import java.util.Arrays;

class Main {
    public static int read() {
        Scanner input = new Scanner(System.in);
        int num2 = input.nextInt();
        System.out.println(num2);
        return num2;
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int num1 = input.nextInt();
        System.out.println(num1);
        read();
    }
}

输入input.txt内容:

1
2

预期输出:

1
2

实际输出

1

Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:937)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at Main.read(main.java:7)
    at Main.main(main.java:16)
Java 数组 java.util.scanner

评论

0赞 tgdavies 1/28/2023
你期望什么输出?你会得到什么?
0赞 Tim Moore 1/28/2023
如果您将扫描仪作为参数传递给而不是创建一个新参数,它会起作用,但我不确定为什么会这样。read
1赞 Tim Moore 1/29/2023
这回答了你的问题吗?如何在 System.in 上使用多个扫描仪对象?

答:

1赞 Tim Moore 1/28/2023 #1

这可以通过重用 的单个实例来解决,而不是在方法中创建一个新实例:Scannerread

import java.util.Scanner;
import java.util.Arrays;

class Main {
    public static int read(Scanner input) {
        int num2 = input.nextInt();
        System.out.println(num2);
        return num2;
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int num1 = input.nextInt();
        System.out.println(num1);
        read(input);
    }
}

这将产生预期的输出,并且不会引发异常。

评论

0赞 DilLip_Chowdary 1/28/2023
我们如何在不更改代码的情况下做到这一点
0赞 Tim Moore 1/29/2023
@DilLip_Chowdary代码有问题,我认为没有解决方法。
0赞 DilLip_Chowdary 1/30/2023
我们能够在手动输入传递的情况下成功运行上述命令,只有在使用文件通过 cli 传递时才会出现此问题。
1赞 Holger 4/28/2023
@DilLip_Chowdary在一个合法用例中有效但在另一个合法用例中不起作用的代码仍然被破坏。当您将数字放入两行并在插入两行之间等待时,您的代码恰好可以工作,但是当您一次复制和粘贴两行(或假设输入两行太快)时,手动输入行时,它也会中断。在一行中输入数字时,它也会中断。要点是,是缓冲的,对同一源使用多个可能会造成数据丢失或不一致的情况。ScannerScanner