2012-04-11 159 views
0

我有一個列表。如果您輸入的值在該列表中,則返回結果。即使值超出結果範圍 - 由於mod%,結果也會返回。 這真的很難用言語解釋我的問題,所以我們來看看代碼從列表中返回值超出列表範圍的索引值C#

 List<int> list1 = new List<int>(){ 0, 1, 2, 3, 4, 5, 6 }; 
     int value = 3; // what's this number to us? 
     string result = ""; 
     int starting_number = 3; 

     if (value == list1[(list1.IndexOf(starting_number) + 2) % list1.Count()]) 
     { result = "yeah"; } 
     else if (value == list1[(list1.IndexOf(starting_number) + 1) % list1.Count()]) 
     { result = "cool"; } 
     else if (value == list1[(list1.IndexOf(starting_number) + 0) % list1.Count()]) 
     { result = "one"; } 
     else if (value == list1[(list1.IndexOf(starting_number) - 1) % list1.Count()]) 
     { result = "noo"; } 
     else {result = "oops cant find it"; } 
  • STARTING_NUMBER。這個數字是不變的。所有的測量都是根據這個數字進行的。
  • value - 我們輸入的值。我們需要得到的結果爲這個值
  • 結果 - 只是一個字符串

這就是它是如何工作的:

STARTING_NUMBER = 3,值= 2 =>結果= 「野應」(因爲2 =的IndexOf(STARTING_NUMBER) - 1)

STARTING_NUMBER = 6,值= 0 =>結果= 「酷」 (6 + 1 = 0)

STARTING_NUMBER = 0,value = 6 =>將發生錯誤。 (0 - 1 = 6)

任何想法如何改善代碼來擺脫此錯誤?基本上我可以抓取值是「之後」starting_number,但我無法抓住他們「之前」starting_number。

  • (6 + 1 = 0)的情況下:表看起來是6,0,1,2,3 ...

  • 在的情況下,(0 - 1 = 6):名單應該是這樣的...... 4,5,6,0

,如果您有任何疑問,請向..它真的很難解釋文字的問題,但我想提出的實例它更清楚。

如何獲取低於starting_number的值?

+2

你還沒有實際問過一個問題... – 2012-04-11 09:18:52

+0

任何想法如何改善代碼來擺脫這個錯誤?基本上我可以抓取值是「之後」starting_number,但我無法抓住他們「之前」starting_number。 – Alex 2012-04-11 09:27:40

+0

這導致我們:**您如何獲取低於starting_number的值?** – Alex 2012-04-11 09:28:59

回答

3

如果我理解正確的,你想將所有整數映射到範圍0到計數-1和當前的公式是x % count只有當x > 0工作。然後,如果你想它的工作的所有值x嘗試這一個(x % count + count) % count

+0

+1您的解決方案也可以工作。謝謝! – Alex 2012-04-11 09:39:01

+0

@Alex它不能工作,因爲Likurgs給你不同於我的號碼,當start_index <= 0時 – user1096188 2012-04-11 09:42:49

1

嘗試使用此代碼

list1[Math.Sign((list1.IndexOf(starting_number) - 1))*(list1.IndexOf(starting_number) - 1) % list1.Count()]