繁体   English   中英

在java中从用户获取整数数组输入

[英]Get integer array input from user in java

我需要从用户那里获得一系列整数。 系统不会提示用户输入数字。 输入将具有以下形式:

6

34 12 7 4 22 15

3

3 6 2

第一行表示第二行中的整数数。 我首先尝试将第二行作为String读取,然后使用StringTokenizer将其分解为代码中的整数。 正常情况发生在我的程序中很多,这很耗时,我需要直接阅读它们。 我记得在C ++中它过去相当简单。 以下代码段用于执行此操作。

for(i=0;i<6;i++)
cin>>a[i];

为此,我使用了java.util.Scanner,我的代码如下所示:

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
Scanner src = new Scanner(System.in);

for(x=0;x<2;x++){
    arraySize = Integer.parseInt(br.readLine());

    for(i=0;i<arraySize;i++)
        array[i] = src.nextInt();
}

在这种情况下,我收到以下错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "34 12 7 4 22 15"

我愿意接受建议,而不是仅仅依靠Scanner。 如果有任何其他方法来实现这一点,我就是游戏。

为了将来参考,这里有一种方法可以使用Scanner类:

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


public class NumberReading {
    public static int [] readNumsFromCommandLine() {

        Scanner s = new Scanner(System.in);

        int count = s.nextInt();
        s.nextLine(); // throw away the newline.

        int [] numbers = new int[count];
        Scanner numScanner = new Scanner(s.nextLine());
        for (int i = 0; i < count; i++) {
            if (numScanner.hasNextInt()) {
                numbers[i] = numScanner.nextInt();
            } else {
                System.out.println("You didn't provide enough numbers");
                break;
            }
        }

        return numbers;
    }

    public static void main(String[] args) {
        int[] numbers = readNumsFromCommandLine();
        System.out.println(Arrays.toString(numbers));
    }
}

你说你可以在C ++中使用以下代码:

for(i=0;i<6;i++) 
cin>>a[i];

如果这是您在C ++中使用的,为什么不使用它呢?

for(i=0;i<6;i++)
a[i] = input.nextInt();

假设扫描器声明是:

Scanner input = new Scanner(System.in);

从我所看到的,人们正试图为你编写整个程序。 但正如你所说,你可以使用C ++代码解决这个问题,我只是为你将代码转换为Java。

如果你想要完整的代码,这里是:

import java.util.Scanner;

public class arrayFun {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        // Create a new array. The user enters the size
        int[] array = new int[input.nextInt()];

        // Get the value of each element in the array
        for(int i = 0; i < array.length; i++)
            array[i] = input.nextInt();

        /* Note that the user can type the following:
         * 6
         * 34 12 7 4 22 15
         * This will set the array to size 6
         * array[0] = 34;
         * array[1] = 12;
         * etc.
         */

    }

}

我意识到这种反应已经晚了很多年,但当我遇到这个问题时,我正在寻找一个不同的问题。 这里的答案让我很困惑,直到我意识到这不是我想要的。 看来这仍然出现在谷歌上,我决定发布这个。

    Scanner in = new Scanner(inputFile);
    int[] ints = Arrays.stream(in.nextLine().split("\\s+"))
      .mapToInt(Integer::parseInt).toArray();

如果你的输入是“6 34 12 7 4 22 15 3 3 6 2”,用空格分隔,那么它将由br.readLine()一次性读取。 正如您所见,您无法将“6 34 12 7 4 22 15 3 3 6 2”传递给parseInt

对于这种情况,我建议你在br.readLine()返回的String上调用String.split() ,然后你将得到一个字符串数组,它们可以依次传递给Integer.parseInt()

您可以尝试使用StringTokenizer ,但如果您知道提前使用了哪个分隔符,只需使用String.split()

new Scanner(System.in).useDelimiter("[ ]") 

应该帮助你避免Vanathi在他的回答中提到的问题。 至于知道数组的大小,例如:

br.readLine().split("[ ]").length;

应该这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM