[英]Need help understanding code
我正在學習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]];
如何++frequency[responses[answer]];
工作? 在看這個時,如果我第一次通過循環接受reponses[answer]
,這將代表responses[0]
,這將是3,正確嗎? 這是我感到困惑的地方,這條線的++frequency
部分是做什么的?
frequency[responses[answer]] = frequency[responses[answer]] + 1;
編輯:我認為這樣寫是非常不清楚的。 作為個人偏好,我不喜歡對存在大量索引的元素使用一元操作(++ x,x ++等)。
它在陣列中該位置的頻率上加一。
例如,在該行執行后,位置3(來自您的示例)的頻率將增加1。
編輯:因此,更詳細地說,當answer = 0時,響應[0] = 3,所以頻率[3]會添加一個。
++也可以很容易地在命令的末尾。 換一種說法,
++frequency[responses[answer]];
和使用一樣(在這種情況下)
frequency[responses[answer]]++;
讓我們分解一下:正如你所指出的那樣,在第一次通過時,回答[answer]將評估為“3”
所以這看起來像++頻率[3]
++將索引3處的數組值遞增1
夠簡單嗎?
我還應該指出,在數組之前而不是之后應用++會影響遞增的執行方式(盡管它不會影響此代碼的結果)。
例如:
int n = 2;
int j = ++n;
int k = n++;
什么是j和k?
j將是3,k也將是3.這是因為如果你之前放置++,它首先評估它。 如果將它放在最后,它會在表達式的其余部分之后對其進行求值。
如果有幫助,可以將++ frequency []視為“frequency = frequency + 1”。
如果++運算符位於變量之前,則在執行語句之前應用增量。 如果后來出現++,則執行該語句,然后遞增變量。
在這種情況下,無關緊要,因為在之前或之后遞增不會影響邏輯。
由於“響應[回答]”評估為一個數字,該行代碼正在遞增該數組索引處的頻率條目。 所以第一次通過,答案是0,所以響應[答案]是3,所以頻率[3]框增加1.下一次,頻率[2]框增加......等等等等
frequency是一個數組,其中所有元素都初始化為0(int的默認值)。 行++frequency[responses[answer]]
將增加在responses[answer]
找到的整數指出的頻率元素。 通過將++放在頻率前面,數組元素將在返回結果值之前遞增。
您可以在此處閱讀有關++運算符的更多信息 。
在這種情況下,在您走過時重寫代碼通常很有用。
當答案= 0時
當答案= 1時
等等。
它意味着在頻率[3]處遞增值。 其中3是回復的結果[回答]。 類似地,下一次迭代將在頻率[2]處遞增值。
C#中的++運算符應用於整數時會將其遞增1。
您正在查看的特定行,frequency是一個包含7個元素的整數數組。 這有點令人困惑,因為你在代碼中解釋它的方式,看起來這個代碼會破壞6以上的響應數組中的任何值。
拋開這個問題,基本上它正在遞增它正在訪問的數組的哪個索引。 因此在您的示例中,響應[0]將為3.因此,此行將找到頻率[3]的值並將其遞增1.由於整數數組初始化時所有值均為零,因此在第一次迭代后,頻率[3]然后如果你的響應數組中有另外3個,則頻率[3]將再次遞增(即響應[4])。
我希望這可以幫助你。
代碼段的目標似乎是確定每個響應出現在“響應”數組中的次數。 因此,對於您的示例集,頻率[3]應為5,頻率[5]應為5,等等。
因此,您詢問的行從響應數組中獲取當前元素,並將頻率數組中的關聯值增加1,以指示已在響應中觀察到特定值。
整個代碼片段執行后,頻率數組包含在響應數組中觀察到0到7的每個元素的次數。
它使用頻率數組來計算每個響應輸入的次數。 你可以為每個答案都有一個計數器:
int numberOfOnes = 0;
int numberOfTwos = 0;
// Etc...
但這將是丑陋的編程,而不是那么容易或有效。 使用頻率數組允許您不使用if / else if塊或開關,使代碼更易於閱讀。
關於頻率數組的另一件事。
int[] frequency = new int[7];
這會將數組中的所有整數初始化為0,這就是為什么你可以通過遞增它來開始,而不是看它是否是第一次進行特定響應,然后用1或類似的東西初始化它。
祝你們擁有所有有趣的C#,祝你好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.