我正在学习C#课程,我需要帮助理解以下代码。
代码有一个数组,表示对调查的响应,值为1到10。
输出显示这些评级以及选择值的次数。
以下代码来自我的书,但我将其修改为一个基本的例子。
int[] responses = { 3, 2, 5, 6, 3, 5 , 4, 5, 5, 5};
int[] frequency = new int[7];
for (int answer = 0; answer < responses.Length; answer++)
++frequency[responses[answer]];
for (int rating = 1; rating < frequency.Length; rating++)
Console.WriteLine(rating + ", " + frequency[rating]);
Console.Read();
行++frequency[responses[answer]];
如何运作?在看这个时,如果我第一次通过循环reponses[answer]
,这将代表responses[0]
,这将是3,正确吗?这是我感到困惑的地方,这条线的++frequency
部分是做什么的?
答案 0 :(得分:5)
frequency[responses[answer]] = frequency[responses[answer]] + 1;
编辑:我认为编写这样的内容还不太清楚。作为个人偏好,我不喜欢对存在大量索引的元素使用一元操作(++ x,x ++等)。
答案 1 :(得分:2)
它在数组中该位置的频率上加一。
例如,在该行执行后,位置3(来自您的示例)的频率将增加1。
编辑:那么,更详细的说,当answer = 0时,响应[0] = 3,所以频率[3]会增加一个。
++也可以很容易地在命令的末尾。换句话说,
++frequency[responses[answer]];
与使用
frequency[responses[answer]]++;
答案 2 :(得分:2)
让我们分解一下:正如你所指出的那样,在第一次通过时,回答[answer]将评估为“3”
所以这看起来像++频率[3]
++正在将索引3处的数组值递增1
够简单吗?
我还应该指出,在数组之前而不是之后应用++ 会影响递增的执行方式(尽管它不会影响此代码的结果)。
例如:
int n = 2;
int j = ++n;
int k = n++;
什么是j和k?
j将为3,k也将为3.这是因为如果您之前放置++,则首先对其进行求值。如果将它放在最后,它会在表达式的其余部分之后对其进行评估。
答案 3 :(得分:1)
如果有帮助,可以将++ frequency []视为“frequency = frequency + 1”。
如果++运算符位于变量之前,则在执行语句之前应用增量。如果++之后出现,则执行该语句,然后递增变量。
在这种情况下,无关紧要,因为在之前或之后递增不会影响逻辑。
由于“响应[回答]”评估为一个数字,该行代码正在递增该数组索引处的频率条目。所以第一次通过,答案是0,所以响应[答案]是3,所以频率[3]框增加1.下一次,频率[2]框增加......等等等等。
答案 4 :(得分:1)
frequency是一个数组,其中所有元素都初始化为0(int的默认值)。行++frequency[responses[answer]]
将增加responses[answer]
处找到的整数指出的频率元素。通过将++放在频率前面,数组元素将在返回结果值之前递增。
答案 5 :(得分:1)
在这种情况下,在你走过时重写代码通常很有用。
当答案= 0时
当答案= 1时
等等。
答案 6 :(得分:0)
这意味着在频率[3]处递增值。其中3是回复的结果[回答]。类似地,下一次迭代将以频率[2]递增值。
答案 7 :(得分:0)
当应用于整数时,C#中的++运算符会将其递增1。
您正在查看的特定行,frequency是一个包含7个元素的整数数组。这有点令人困惑,因为你在代码中解释它的方式,看起来这个代码会破坏6以上的响应数组中的任何值。
除了这个问题之外,基本上它正在递增它正在访问的数组的哪个索引。因此在您的示例中,响应[0]将为3.因此,此行将找到频率[3]的值并将其递增1.由于整数数组初始化时所有值均为零,因此在第一次迭代后,频率[3]如果你的响应数组中有另外3个,那么频率[3]会再次增加(即响应[4])。
我希望这会对你有所帮助。
答案 8 :(得分:0)
代码段的目标似乎是确定每个响应在“响应”数组中出现的次数。因此,对于您的示例集,频率[3]应为5,频率[5]应为5,等等。
因此,您询问的行从响应数组中获取当前元素,并将频率数组中的关联值增加1,以指示在响应中已观察到特定值。
一旦整个代码片段执行,频率数组包含在响应数组中观察到从0到7的每个元素的次数。
答案 9 :(得分:0)
使用频率数组来计算每个响应输入的次数。你可以为每个答案都有一个计数器:
int numberOfOnes = 0;
int numberOfTwos = 0;
// Etc...
但那将是丑陋的编程,而不是那么容易或有效。使用频率数组允许您不使用if / else if块或开关,使代码更易于阅读。
关于频率数组的另一件事。
int[] frequency = new int[7];
这会将数组中的所有整数初始化为0,这就是为什么你可以通过递增它来开始,而不是看它是否是第一次进行特定响应,然后用1或类似的性质初始化它。 / p>
祝你拥有所有有趣的C#。