数组的点积

5
在课堂上,我们需要使用点积编写一小段代码来找到两个数组(数组a和数组b)的总和。我已经写好了我的代码,但是当我运行它时,它没有给我答案。我的教授说我的循环有问题,但我不认为是这样的。因为即使我把 i<a.length 设置为n,它仍然没有给我总和。这个问题可能是由于for循环参数中的i<a.length不被允许吗?以下是我的代码:
public class arrayExample {
    public static void main (String [] args) {

        int[] a = {1,2,2,1};
        int[] b = {1,2,2,1};
        int n = a.length;

        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            sum += a[n] * b[n];    
        }

        System.out.println(sum);
    }
}

i < a.length 在循环参数中确实是有效的。不确定你的讲师在那里说了什么。 - nanofarad
1
它输出什么?它与您预期的输出有何不同? - Justin L.
“n”是什么?这段代码能编译通过吗? - Boris the Spider
@JustinL。之前没有显示任何内容,但是我从下面的答案中意识到我应该计算a[i]*b[i](而不是a[n]*b[n])。谢谢 :) - Sophia Ali
@BoristheSpider 这个程序确实编译通过了,n原本应该代表数组a的长度,但我把它删掉了。 - Sophia Ali
@hexafraction 感谢您的帮助,我意识到 sum= 行是不正确的。 - Sophia Ali
2个回答

26
< p >n 不是循环控制变量,而是 a.length,它是一个越界索引。你可能的意思是


sum += a[i] * b[i];

虽然这并不直接相关,但您可能希望您的for循环是

for (int i = 0; i < n; i++)

我会假设那是你一开始拥有 n 的原因。


@arshajii 谢谢你的帮助。我把代码改成了 sum += a[i]*b[i],现在可以正常运行了。 :) - Sophia Ali

0
public class arrayExample 
{
  public static void main (String [] args) 
   {

     int[] a = {1,2,2,1};
     int[] b = {1,2,2,1};
     int n = a.length;

     int sum = 0;
     for (int i = 0; i < n; i++) 
     {
        sum += a[i] * b[i];    
     }

     System.out.println(sum);
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接