使用具有整数序列的扫描程序

时间:2014-09-06 14:57:42

标签: java java.util.scanner

我正在编写一个程序来从控制台获取一系列整数,例如

1 5 3 4 5 5 5 4 3 2 5 5 5 3

然后计算出现次数并打印以下输出:

0 - 0
1 - 1
2 - 1
3 - 3
4 - 2
5 - 7
6 - 0
7 - 0
8 - 0
9 - 0

其中第二个数字是第一个数字的出现次数。

代码:

public static void main (String args[])
{
    Scanner chopper = new Scanner(System.in);
    System.out.println("Enter a list of number: ");

    int[] numCount = new int[10];
    int number;

    while (chopper.hasNextInt()) {
        number = chopper.nextInt();
        numCount[number]++;
    }

    for (int i = 0; i < 10; i++) {
        System.out.println(i + " - " + numCount[i]);
    }
}

但是在输入序列之后,我们必须输入一个非整数字符,然后按“Enter”键终止扫描器并执行“for”循环。有没有办法我们不必键入非整数字符来终止扫描仪?

4 个答案:

答案 0 :(得分:3)

按Enter键然后按Control-D

可以退出

如果您不想这样做,那么Scanner没有别的办法。

您必须通过其他方式阅读输入,例如使用BufferedReader

String line = new BufferedReader(new InputStreamReader(System.in)).readLine();
Scanner chopper = new Scanner(line);

更好(受@user3512478方法的启发),有两个扫描仪,没有BufferedReader

Scanner chopper = new Scanner(new Scanner(System.in).nextLine());

答案 1 :(得分:0)

最佳方式IMO:

String str;
Scanner readIn = new Scanner(System.in);
str = readIn.nextLine();
String[] nums = str.split(" ");
int[] finalArray = new int[nums.length];
for(int i = 0; i < nums.length; i++) {
    finalArray[i] = Integer.parseInt(nums[i]);
return finalArray;

希望这有帮助!

答案 2 :(得分:0)

最佳方式:不仅对于此模式,对于任何类型的序列输入识别,修改Scanner对象的分隔符以获得所需的序列识别。

这里,在这种情况下,将斩波器分隔符更改为空白字符(空格)。即"\\s"。您还可以使用"\\s*"指定零个或多个空白字符出现

这使扫描仪检查空格而不是等待Enter键击。

public static void main (String args[])
{
    Scanner chopper = new Scanner(System.in).useDelimiter("\\s"); \\ Delimiter changed to whitespace.
    System.out.println("Enter a list of number: ");

    int[] numCount = new int[10];
    int number;

    while (chopper.hasNextInt()) {
        number = chopper.nextInt();
        numCount[number]++;
    }

    for (int i = 0; i < 10; i++) {
        System.out.println(i + " - " + numCount[i]);
    }
}

答案 3 :(得分:-2)

尝试使用for循环。

for (int i:1; i<10;i++) {
     chopper.hasNextInt()
     number = chopper.nextInt();
     numCount[number]++;
}

来自Oracle Doc,它说: 扫描操作可能会阻止等待输入 hasNext和next方法都可能阻止等待进一步输入