有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 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相同

    我的观点是,你应该对每一个数字都应用模,这样你得到的是小的数字,甚至没有你遇到问题的大的数字。 希望这足够清楚,希望能有所帮助