学习数组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 ] );
}
}
答案 0 :(得分:3)
frequency
的索引对应于计数的数字,其中一个索引的值是该数字的频率。它有效,因为responses
中的最大数字为10
,frequency
的长度为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。
在循环内部,增加由答案回答索引的频率元素。