【问题标题】:Mathematical notation to programming code编程代码的数学符号
【发布时间】:2013-05-31 16:19:46
【问题描述】:

我在将以下两个用数学符号编写的函数转录成 Java 代码时遇到了困难(两个函数的输入都是带有 D 元素的数组):

有人可以看看下面的代码并告诉我它是否有问题?

public double firstFunction(double[] arrayOfElements) {

double sum = 0;
double sumTwo = 0;

for(int i = 0; i < arrayOfElements.length; i++) {
    for(int j = 0; j < i; j++){
        sumTwo = sumTwo + arrayOfElements[j];
    }
    sum = sum + Math.pow(sumTwo, 2);
    }
    return sum;
}

public double secondFunction(double[] arrayOfElements) {
    double maximum = Math.abs(arrayOfElements[0]);
    for (int i = 0; i < arrayOfElements.length; i++) {
        if (Math.abs(arrayOfElements[i]) > maximum) {
            maximum = Math.abs(arrayOfElements[i]); 
        }
    }
    return maximum;
}

【问题讨论】:

  • 到目前为止你做了哪些调试?什么是输入案例导致错误结果的示例?
  • 我没有进行任何调试,因为我不知道会得到什么样的结果。我只是问转录是否有序,因为我对数学符号不是很熟悉。此外,我没有任何可以映射到特定输入案例的结果。
  • 恐怕这不太适合 Stack Overflow...如果您没有任何方法测试此代码,那么我不确定我们能做多少帮助您解决问题,而不是通过检查发现错误。
  • 那些因为认为这个问题不平易近人而投票结束的人应该注意这样一个事实,即有人觉得它平易近人可以回答!

标签: java mathematical-notation


【解决方案1】:

第一种方法应在每次迭代中将sumTwo 重置为零。目前,它从外循环的一次执行累积值到下一次执行。否则没关系。

另外,更有效的是,您会注意到一次迭代的sumTwo 与下一次迭代之间的区别在于新的数组元素。这意味着您不需要内部循环。

for(int i = 0; i < arrayOfElements.length; i++) {
    sumTwo = sumTwo + arrayOfElements[j];
    sum = sum + Math.pow(sumTwo, 2);
}

第二种方法应该返回具有最大绝对值的元素的index,而不是元素本身。注意 max 中的子索引 i

【讨论】:

  • 感谢您的澄清。还有一件事。所以 seconds 函数应该根据绝对值返回最大的元素的索引。如果 a 有一个数组 [-1,3,-4] 该方法应该返回 2?
猜你喜欢
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 2014-07-17
  • 1970-01-01
  • 2016-04-21
相关资源
最近更新 更多