當 p = 255 時,系統給了我超出范圍的例外。我的理解是使用“OR”運算子,if 陳述句的后面部分應該生效。然而,事實并非如此。請告知如何修復它。
for (int p = 0; p < 256; p )
{
if (buffer[p] == buffer[p 1] || buffer[p] == buffer[p - 1])
{
//Code
}
}
uj5u.com熱心網友回復:
在第一次迭代中 p = 0;當 p = 0; 條件運算式的右側試圖訪問緩沖區 [-1],這會引發例外。
您應該從索引 1 開始迭代,并在緩沖區中的最后一項之前結束它。嘗試這樣的事情:
for (int p = 1; p < buffer.Length - 1; p )
{
if (buffer[p] == buffer[p 1] || buffer[p] == buffer[p - 1])
{
//Code
}
}
uj5u.com熱心網友回復:
您有超出范圍的錯誤。這意味著索引p超出buffer范圍,即
// buffer has Length items, starting from 0
[0 .. buffer.Length - 1]
現在,讓我們看看索引的使用情況:你有
if (buffer[p] == buffer[p 1] || buffer[p] == buffer[p - 1])
然后你解決
buffer[p]哪里p可以在0..buffer.Length - 1范圍內buffer[p 1]哪里p可以在-1..buffer.Length - 2范圍內buffer[p - 1]哪里p可以在1..buffer.Length范圍內
結合所有3的指標范圍p在一起,我們得到p的1..buffer.Length - 2范圍或
for (int p = 1; p < buffer.Length - 1; p )
if (buffer[p] == buffer[p 1] || buffer[p] == buffer[p - 1]) {
...
}
注意邊緣情況(第一buffer項和最后一項):
當p == 1我們有
(buffer[1] == buffer[2] || buffer[1] == buffer[0])
^
first item
什么時候 p == buffer.Length - 2
(buffer[buffer.Length - 2] == buffer[buffer.Length - 1] || buffer[buffer.Length - 2] == buffer[buffer.Length - 3])
^
last item
這就是為什么沒有物品丟失的原因
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399132.html
