java - 如何将多个整数从 Bash shell 脚本传递到 Java System.in?
问题描述
我需要将两个整数从 Bash shell 脚本传递给我的 Java 程序。
这是我的Java代码。
import java.util.Scanner;
public class ConsoleApp {
public static void main(String[] args) {
int x = getInt();
int y = getInt();
System.out.println("x = " + x);
System.out.println("y = " + y);
}
private static int getInt() {
Scanner s = new Scanner(System.in);
return s.nextInt();
}
}
这里是 Bash 脚本,脚本的名称是run.sh
.
#!/usr/bin/env bash
declare -r AppName=ConsoleApp
function compile() {
javac $AppName.java
}
function execute() {
echo 1 2 | java $AppName
}
compile; execute;
$ chmod a+x run.sh
$ ./run.sh
我执行后,会出现以下错误消息。
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 ConsoleApp.getInt(ConsoleApp.java:13)
at ConsoleApp.main(ConsoleApp.java:6)
现在,我知道它可以读取第一个整数x
但无法读取第二个整数y
。
解决方案
您必须对两个号码使用相同的扫描仪:
Scanner s = new Scanner(System.in);
int x = s.nextInt();
int y = s.nextInt();
System.out.println("x = " + x);
System.out.println("y = " + y);
否则,第一个扫描器将消耗System.in
比第一个数字更多的数据,并将剩余数据存储在内部缓冲区中以供进一步处理。如果您随后切换到另一台扫描仪,则数据丢失,新的扫描仪将再次读取,System.in
但没有更多内容了。
或者,通过参数将两个数字作为命令行参数传递可能更容易args
。
推荐阅读
- javascript - 可以将数据从烧瓶发送到Javascript吗?
- python - 在python中,我想计算一个尚不存在的数字要减去多少,并且只有在我知道要起飞的数量后才会存在
- java - singleshoicedialog 中正负按钮的问题
- python - 使用 argparse 打开 json 文件?
- typescript - 使用打字稿转换我想查找并替换 this 关键字,我该如何找到它?
- python - int 对象在 python 中不可下标
- angular - patchValue with { emitEvent: false, onlySelf: true } 触发 Angular 中的 valueChanges
- flutter - 如何更改导航抽屉的工具栏颜色
- sql - 要搜索的数千个值
- r - R 包源文件