java CodeAbbey挑战14个数据输入问题?
int fnum = Integer.parseInt(split[0]);// holds 5
//split[] holds each line of the file.
double sum = fnum;// sum = 5
double i = 0.0;
double last = 0.0;
for(int j = 1; j<(split.length-1);j++)
{
i = Integer.parseInt(split[j].replaceAll("[^0-9]", ""));
if(split[j].charAt(0) == '*')
{
sum = sum * i;
}
else if(split[j].charAt(0) == '/')
{
sum = sum / i;
}
else if(split[j].charAt(0) == '+')
{
sum = sum + i;
}
else if(split[j].charAt(0) == '-')
{
sum = sum - i;
}
else if(split[j].charAt(0) == '%')
{
sum = sum % i;
}
}
System.out.println(sum);// Prints 1.0
}
}
/*
Actual Data File Imported
5
+ 3
* 7
+ 10
* 2
* 3
+ 1
% 11
Answer should be : 1
*/
好吧,我的代码可能看起来很混乱,但我努力了。放弃了几次,但又尝试了一次。我的问题是,对于较小的数据集,比如我在最后几行中导入并注释掉的代码,工作正常。但对于更大的数据集,这都是错误的,为什么?我试着让所有数据集加倍以获得更大的值,但不知为什么它错了?
到目前为止,我还是一个初学者,任何帮助都将不胜感激
为了更具体地说明我导入文件的问题,我将其全部设置为字符串,逐行设置,然后将其全部添加到字符串数组中,这样每一行都位于字符串数组中,例如split[1]将打印+3。在那之后,我把if循环中的数字和符号分离出来,用一个FOR循环来遍历所有集合。现在,if循环捕获符号,然后执行适当的算法。但不知怎么的,它没有?我用double而不是int来表示sum。那没用。我认为if声明可能是问题所在
# 1 楼答案
不确定你是否还需要答案,但这里有一个提示: 这个具体练习的全部目的是学习模运算,也就是说,如果你将所有数字的余数相加/相乘,你会得到与使用给定数字相同的答案,也就是说,如果你对所有数字应用相同的、在%之后的数。 例如:
在所有应用的操作之后,超过%3的数字将导致2488。 所以2488%3=1
所以,如果你把%3应用到每一个数字上,包括最初的数字,你会得到相同的答案,当然,对它们的余数使用相同的运算,然后再将总和除以3
所以,你得到
2 + 0 * 0 * 0 + 1
,它等于1。 和1 % 3 = 1
这与2488 % 3 = 1
相同我的观点是,你应该对每一个数字都应用模,这样你得到的是小的数字,甚至没有你遇到问题的大的数字。 希望这足够清楚,希望能有所帮助