【问题标题】:Java : Get only 1 line of integers from the console?Java:从控制台只获取 1 行整数?
【发布时间】:2016-03-20 12:32:40
【问题描述】:

我最近学习了 Java,但我遇到了一些控制台输入问题。

基本上,我想从控制台读取一个整数数组,格式如下:

1 2 3 4 5 6

我浏览了论坛上的一些示例,并决定使用扫描仪 nextInt() 方法来执行此操作。

我的代码目前看起来像这样:

Scanner get = new Scanner(System.in);
List<Integer> elements = new ArrayList<>();

while (get.hasNextInt()) {           
        elements.add(get.nextInt());
    }

此代码的问题在于,当我在控制台上按“Enter”时,while 循环并没有停止。 这意味着在我输入一些数字(1 3 5 7)然后按 Enter 后,程序不会继续执行,而是等待更多整数。它停止的唯一方法是我向控制台输入一个字母。

我尝试在我的 while 循环中添加 !get.hasNextLine() 作为条件,但这没有帮助。

如果有人知道我该如何解决这个问题,我将非常感激。

【问题讨论】:

  • 在双引号中输入"1 2 3 4 5 6",用nextLine() 读取,稍后拆分。

标签: java input console newline


【解决方案1】:

如果你想只阅读一行,最简单的答案可能是最好的:)

Scanner in = new Scanner(System.in); String hString = in.nextLine(); String[] hArray = hString.split(" ");

现在,在数组 hArray 中,您拥有来自输入的所有元素,您可以像 hArray[0] 一样调用它们

【讨论】:

  • 谢谢。虽然它不是直接读取 int,而是读取字符串并对其进行拆分和解析。这是我的问题的一个非常巧妙的解决方案:) +1
  • 是的,你是对的 - 但你可以通过 Integer.parseInt(yourString) 方法简单地将字符串解析为 int
【解决方案2】:

你可以读一行,然后用它来构造另一个Scanner。类似的,

if (get.hasNextLine()) {
    String line = get.nextLine();
    Scanner lineScanner = new Scanner(line);
    while (lineScanner.hasNextInt()) {          
        elements.add(lineScanner.nextInt());
    }
}

Scanner(String) 构造函数(根据 Javadoc)构造一个新的 Scanner,生成从指定字符串扫描的值。

【讨论】:

    【解决方案3】:
    Scanner get = new Scanner(System.in);
    String arrSt = get.next();
    StringTokinizer  stTokens = new StringTokinizer(arrSt," ");
    int [] myArr = new Int[stTokens.countTokens()];
    int i =0;
    while(stTokens.hasMoreTokens()){
        myArr[i++]=Integer.parseInt(stTokens.nextToken());
    }
    

    【讨论】:

      【解决方案4】:

      您可以使用以下内容。用户只需输入每个整数而不按回车键,最后按回车键。

      Scanner get = new Scanner(System.in);
      List<Integer> elements = Stream.of(get.nextLine().split(" "))
                                     .map(Integer::parseInt)
                                     .collect(Collectors.toList());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多