CodeAbbey Challenge 14数据输入问题?

时间:2016-02-28 21:35:19

标签: java import

    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声明可能是问题所在。

1 个答案:

答案 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 = 12488 % 3 = 1相同。

我的观点是,你应该对每个数字应用模数,所以你得到的数字很少,甚至没有你遇到问题的大数字。 希望这很清楚,并希望它有所帮助。