数组摘要(工作代码),而不是抓住一行代码

时间:2014-12-09 00:19:31

标签: java arrays sorting summarization

学习数组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 个答案:

答案 0 :(得分:3)

frequency的索引对应于计数的数字,其中一个索引的值是该数字的频率。它有效,因为responses中的最大数字为10frequency的长度为11,这意味着10是{{1}的有效索引(数组的最大索引始终是数组长度 - 1 )。

frequency

您可以将 two 1's seven 2's | | v v values: [ 0 ][ 2 ][ 7 ] ... and so on indices: 0 1 2 视为&#34;将与此响应相对应的频率提高一个&#34;。

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

responses[answer]

&#34;对于每个响应,将响应的频率增加一个&#34;

答案 1 :(得分:0)

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

所以让我们看一下,看看答案是2,然后回答[2] = 6,这样就增加了频率[6]的数量,如果它是0,那么它现在是一个

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

像这样:

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

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

答案 2 :(得分: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;
}

答案 3 :(得分:0)

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

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

在循环内部,增加由答案回答索引的频率元素。