循环中的嵌套数组如何工作

3

我正在尝试理解循环中这个数组的工作方式

for (int answer=0; answer<responses.length; answer++)
{
++frequency[responses[answer]]
}

频率是一个在开始时初始化的数组,如下所示:

int [] frequency = new int [6];

我们还有一个作为数组的响应,具有值int[] responses= {1,2,3,4,4,4,4,4}

我不理解这个++frequency[responses[answer]]是如何工作的,它看起来像嵌套数组,但它将如何工作?

2个回答

1

没有嵌套数组。您只是嵌套了两个数组访问语法。

为了解释这段代码,我们首先需要知道answer变量如何改变。从for循环头部可以看出,它从0开始,一直到responses.length - 1,即8。现在我们可以评估表达式frequency[responses[answer]]

// in each iteration of the loop
frequency[responses[0]]
frequency[responses[1]]
frequency[responses[2]]
frequency[responses[3]]
frequency[responses[4]]
frequency[responses[5]]
frequency[responses[6]]
frequency[responses[7]]

现在我们可以评估responses[x]部分。我们只需要在responses数组中找到相应的响应即可。responses[0]是第一个项目,即1
frequency[1]
frequency[2]
frequency[3]
frequency[4]
frequency[4]
frequency[4]
frequency[4]
frequency[4]

该语句还包括++ 运算符,它将frequency 数组中特定索引递增1。因此,所有上述索引将依次递增1,使frequency数组如下所示:
[0, 1, 1, 1, 5, 0]

在更高的抽象层面上,这段代码正在计算特定响应在responses数组中出现的次数。例如,4出现了5次。

0

表达式

++frequency[responses[answer]]

就好像它是直接写出来的一样

int fi = responses[answer];
++frequency[fi];

frequency 具有六个元素,而 responses 中的所有条目都是六个元素数组的有效索引。 answers 具有八个元素,只要 answer 在 0 到 7 之间,整个过程就可以正常工作。


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