我需要从控制台加载大量数字,用空格分隔,我的结果应该计算输入中的位数。这些可以是从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);
答案 0 :(得分:1)
一些事情,首先in.read()
返回它读取的字符数。您需要存储该值,因为int
(int[]
中的默认值为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}}