提问人:Jason Clark 提问时间:5/21/2020 最后编辑:Jason Clark 更新时间:5/21/2020 访问量:992
在 Java 中计算数组索引中的总和
Calculating a sum within an array index in Java
问:
解决方案:我在其他地方使用,我的代码的第二个变体没有更新它,因此问题稍后出现在我的代码中。相当愚蠢,令人尴尬,但哦,好吧!sum
这是一个工作 Java 代码块:
int sum = 0;
for (int r = 0; r < k; r++) {
sum += matrix[r][c];
}
totals[0][c] = sum;
k
行中的元素被汇总到 中,然后存储在相应的索引中。r
sum
totals
我的问题是,为什么我不能有这样的代码?
for (int r = 0; r < k; r++) {
totals[0][c] += matrix[r][c];
}
我没有使用单独的整数,而是简单地在正确的索引中计算所述总和?这会产生一个不同的、非常错误的输出。这是一个好的做法还是坏的做法?为了澄清,此时初始化为所有 0。sum
totals
totals
我有一种感觉,我错过了一些相当简单的东西,但我正在努力找到有关该主题的任何有用信息,包括我在 Java 中发现的有关数组性质的信息。
答:
0赞
user404
5/21/2020
#1
要分解代码,请执行以下操作:
totals[0][c] += matrix[r][c];
方法
totals[0][c] = totals[0][c] + matrix[r][c];
所以现在,从你的第一次循环迭代开始考虑,你不想添加任何以前存储在totals[0][c]中的值,对吧?for
现在,有什么方法可以避免并以这种方式做同样的事情?只需在添加之前初始化为 0。
totals[0][c] = 0;
for (int r = 0; r < k; r++) {
totals[0][c] += matrix[r][c];
}
评论
0赞
Jason Clark
5/21/2020
感谢您的回复!我知道你来自哪里,但不幸的是我已经尝试过了。既可以按照您演示的方式进行演示,也可以遍历整个总计 2D 数组,将其所有值分配给 0。据我了解,初始化任何具有给定大小的数组已经将其值设置为 0,但我认为值得一试。
0赞
user404
5/21/2020
这应该不是问题,如果数组正确初始化,应该可以解决我提到的您的情况。顺便说一句,你有什么错误吗?
0赞
Jason Clark
5/21/2020
没有错误,只是输出不正确,线性小于预期。随着输入的增长,输出会进一步不正确。我已经测试了数组的所有元素是否实际上都初始化为 0,并且它们位于 for 循环之前。
0赞
user404
5/21/2020
据我所知,我可以向你保证,如果你在问题添加问题中提到的那条线是你想要实现的,那么这是正确的。如果这不符合您的期望,我认为问题出在其他地方,而不是这里的代码。更好的是,尝试一些新的矩阵示例集,用笔和纸执行,然后执行代码并对结果进行交叉验证,结果和原因都是错误的。
0赞
Jason Clark
5/21/2020
回到纸笔吧!虽然说实话,但我认为我可能专注于一个非问题。我的原始代码是有效的,所以我不妨坚持下去 - 我主要只是好奇 Java 中是否有一些我不知道的数组行为。感谢您的建议,感谢您抽出宝贵时间回复!
0赞
Eric Gutiérrez
5/21/2020
#2
您需要初始化 的值。totals[0][c] = 0
为此,您可以在创建矩阵时执行以下操作:
Float[] array = new Float[c];
Arrays.fill(array, 0f);
totals.add(array);
for (int r = 0; r < k; r++) {
totals[0][c] += matrix[r][c];
}
评论
0赞
Jason Clark
5/21/2020
不幸的是,将 totals[0][c](以及所有总计)初始化为 0 对输出没有影响。不过,据我所知,在 Java 中初始化 int 数组已经将所有值设置为 0。这是不正确的吗?
-1赞
Jason Clark
5/21/2020
#3
我在代码的其他地方使用了它,我最初把它看作是一个新的总和,而不是原来的总和。由于我的第二个代码变体没有更新,因此第二次使用它是不正确的。我犯了愚蠢的错误,但生活和学习。sum
sum
评论
totals[0][c]
totals
c