如何将多个整数从bashshell脚本传递到Java System.in?
我需要将两个整数从bashshell脚本传递到我的Java程序 这是我的Java代码如何将多个整数从bashshell脚本传递到Java System.in?,java,bash,Java,Bash,我需要将两个整数从bashshell脚本传递到我的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.printl
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
执行后,出现以下错误消息
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参数将这两个数字作为命令行参数传递可能更容易。您必须对这两个数字使用相同的扫描仪:
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参数将这两个数字作为命令行参数传递可能更容易。创建一个扫描程序
导入java.util.Scanner;
公共类控制台{
公共静态无效字符串[]args{
扫描仪s=新的扫描系统.in;
intx=getInts;
int y=getInts;
System.out.printlnx=+x;
System.out.printlny=+y;
}
私有静态int getints{
返回s.nextInt;
}
}
在Bash脚本中使用
#!/usr/bin/env bash
declare -r AppName=ConsoleApp
function compile() {
javac $AppName.java
}
function execute() {
java $AppName <<EOF
1 2
EOF
}
compile; execute;
创建一个扫描仪
导入java.util.Scanner;
公共类控制台{
公共静态无效字符串[]args{
扫描仪s=新的扫描系统.in;
intx=getInts;
int y=getInts;
System.out.printlnx=+x;
System.out.printlny=+y;
}
私有静态int getints{
返回s.nextInt;
}
}
在Bash脚本中使用
#!/usr/bin/env bash
declare -r AppName=ConsoleApp
function compile() {
javac $AppName.java
}
function execute() {
java $AppName <<EOF
1 2
EOF
}
compile; execute;
建议:尝试使用管道而不是管道,以便将标准输入传递给java代码。此外,每次要读取标准输入时,请创建一个扫描程序,而不是一个新的扫描程序。建议:尝试使用而不是管道,以便将标准输入传递给java代码。此外,每次要从标准输入读取数据时,请创建一个扫描仪,而不是一个新的扫描仪。