2

学习数组atm(自以为是的菜鸟)有人可以解释一下这部分代码是什么意思吗?

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

我无法理解它的逻辑。显然“答案”是我的计数器。频率增加 1 直到它到达数组 #11(即数字 10),但括号内发生的事情让我感到困惑。但如果达到最大数量 10,结果(正确)给出实际频率。我的猜测是这段代码操纵了这个类的很大一部分。
我建立在这段代码之上,但我默认使用这部分代码(因为它本身就在书中给出)。

谢谢你。

这是完整的代码

public class StudentPoll
{
  public static void main( String[] args)
  {
   int[] responses = {1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6,
       10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6,
       4, 8, 6, 8, 10};
   int[] frequency = new int[ 11 ];

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

   System.out.printf( "%s%10s\n", "Rating", "Frequency" );

   for ( int rating = 1; rating < frequency.length; rating++ )
    System.out.printf( "%d%10d\n", rating, frequency[ rating ] );

   }
 }
4

4 回答 4

3

的索引frequency对应于被计数的数字,并且这些索引之一的值是该数字的频率。它之所以有效,是因为 is 中的最大数字和responsesis10的长度,这意味着它是一个有效的索引(数组的最大索引始终是数组长度 - 1)。frequency1110frequency

           two 1's   seven 2's
                |    |
                v    v
values:  [ 0 ][ 2 ][ 7 ] ... and so on
indices:   0    1    2

您可以将其++frequency[ responses[ answer ] ];视为“将此响应对应的频率增加一倍”。

我会发现这更具可读性,因为它消除了不必要的responses[answer]噪音:

for (int response : responses)
    frequency[response]++;

“对于每个响应,将响应的频率增加一”

于 2014-12-09T00:27:25.900 回答
0

该行的作用是增加频率数组中该特定项目的值。

所以让我们看看答案是否为 2,然后 response[2] = 6,因此您增加频率 [6] 的计数,如果它是 0,那么它现在是 1。

括号本身指向该项目所在的数组的哪一部分,计数从 0 开始。

像这样:

int [] array = {1,2,3,4,5};

array[0] 是 1,1 是数组索引 0 处的项目。

于 2014-12-09T00:21:57.177 回答
0
for (int answer = 0; answer < responses.length; answer++ ) {
 frequency[ responses[ answer ] ] = frequency[ responses[ answer ] ] + 1;
}

甚至:

for (int answer = 0; answer < responses.length; answer++ ) {
 int freqIndex = responses[ answer ];
 frequency[ freqIndex ] = frequency[ freqIndex ] + 1;
}
于 2014-12-09T00:22:27.543 回答
0
for (int answer = 0; answer < responses.length; answer++ )
    ++frequency[ responses[ answer ] ];

循环从零开始,而 answer 小于响应数组的长度,递增 1。

在循环内部,递增由 answer'th 响应索引的频率元素。

于 2014-12-09T00:22:48.263 回答