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
*/
好吧我的代码可能看起来很乱,但我努力了。放了几次,但又试了一次。我的问题是对于较小的数据集,例如我导入的数据集,并在最后几行的代码中注释掉,工作正常。但是对于更大的数据集来说,为什么会这样呢?我试过让我的数据集加倍以获得更大的价值,但不知怎的,这是错的? 到目前为止,我是初学者,非常感谢任何帮助 为了更具体地说明我导入文件的问题,我把它全部变成了一行一行,然后我将它全部添加到一个String数组中,这样每行都在一个字符串数组中,例如split [1]将打印+ 3之后,我将包含在forloop中的if循环中的数字和符号隔离,以覆盖所有集合。现在if循环捕获符号然后执行适当的算术运算。有些但它没有?而且我使用了double而不是int来求和。这没有任何帮助。我相信if声明可能是问题所在。
答案 0 :(得分:1)
不确定您是否还需要答案,但这里有一个提示: 这个具体练习的重点是学习模运算,即如果你总结/乘以所有数字的余数,你会得到与使用给定数字相同的答案,即如果你应用了所有这些数字都在%之后。 例如:
14
+ 78
* 9
* 3
+ 4
% 3
在所有应用操作之后,%3以上的数字导致2488。 所以2488%3 = 1。
因此,如果你对每一个数字(包括初始数字)应用%3,你会得到相同的答案,当然对他们的剩余部分使用相同的操作并再次将总和除以3.
14 % 3 = 2
78 % 3 = 0
9 % 3 = 0
3 % 3 = 0
4 % 3 = 1
所以,你得到的2 + 0 * 0 * 0 + 1
等于1。
1 % 3 = 1
与2488 % 3 = 1
相同。
我的观点是,你应该对每个数字应用模数,所以你得到的数字很少,甚至没有你遇到问题的大数字。 希望这很清楚,并希望它有所帮助。