如何将多个整数从bashshell脚本传递到Java System.in?

如何将多个整数从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

我需要将两个整数从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.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代码。此外,每次要从标准输入读取数据时,请创建一个扫描仪,而不是一个新的扫描仪。