来自char数组的数字计数因Java

时间:2017-03-25 18:59:42

标签: java arrays performance char inputstream

我需要从控制台加载大量数字,用空格分隔,我的结果应该计算输入中的位数。这些可以是从0到10 ^ 9的所有数字。

下面的代码适用于较小的输入,但是对于文件here中的数据,它显示错误的结果,每次执行时它的不同之处(对于附加文件应该是968364)。

我做错了什么?我不能在循环中使用任何方法或类,它必须处理原始类型,但显然我错过了一些东西。

请提供帮助,提前感谢任何提示。

int input_size = 0;
        char[] input = new char[1000000];
            InputStreamReader in = new InputStreamReader(System.in);
            in.read(input);
            for(int a = 0; a<input.length; a++){
                if (input[a] >= 48 && input[a] <= 57){
                    input_size ++;
                }
            }
            System.out.println(input_size);

2 个答案:

答案 0 :(得分:1)

一些事情,首先in.read()返回它读取的字符数。您需要存储该值,因为intint[]中的默认值为0)。接下来,您可以使用'0''9'代替硬编码有效的ascii值 - 但我更喜欢Character.isDigit(char)。像,

InputStreamReader in = new InputStreamReader(System.in);
int readLen = in.read(input);
for (int a = 0; a < readLen; a++) {
    if (Character.isDigit(input[a])) {
        input_size++;               
    }
    // if (input[a] >= '0' && input[a] <= '9') {
    // input_size++;
    // }
}
System.out.println(input_size);

答案 1 :(得分:0)

你没有阅读整个文件,我编辑了你的代码,所以它以1000个字符块的形式读取输入,直到它完成

{{1}}