2012-04-11 6 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 - 입력 한 값입니다. (때문에 = "NOO"

    starting_number = 3, 값 = 2 => 결과 : 단지 문자열

작동 방법 - 우리는이 값

  • 결과를 결과를 얻을 필요 2 = 같이 IndexOf (starting_number) - 1)

    starting_number = 6, 값 = 0 => 결과 = "차가운"(6 + 1 = 0)

    starting_number = 0, 값 = 6 =>오류가 발생합니다. (0 - 1 = 6)

    어떤 아이디어가이 오류를 제거하는 코드를 개선하는 방법? 기본적으로 나는 값을 잡을 수있다. 그들은 "starting_number"후에 "start_number"가 아니라 "before"를 잡을 수있다. (6 + 1 = 0)의 경우

    • 리스트는 경우 ...

    • 이 6,0,1,2,3 같다 (0 - 1의 = 6) : 목록은 질문이있는 경우 4,5,6,0

    이 단어 문제를 설명하기 정말 어렵습니다 .. 질문,하지만 난 만든 예를 생각하십시오 ...이해야한다 더 분명해.

    어떻게 starting_number보다 낮은 값을 얻습니까?

  • +2

    실제로 질문하지 않았습니다 ... –

    +0

    어떤 아이디어가이 오류를 제거하는 코드를 개선하는 방법? 기본적으로 나는 값을 잡을 수있다. 그들은 "starting_number"후에 "start_number"가 아니라 "before"를 잡을 수있다. – Alex

    +0

    은 다음과 같은 결과를 낳습니다. ** 시작 번호 이하의 값을 얻는 방법은 무엇입니까? ** – Alex

    답변

    3

    내가 제대로 이해한다면, 당신은 카운트-1을 0 범위 모든 정수를 매핑 할하고 현재 공식 경우에만 x > 0 작동하는 x % count이다. 그럼 x의 모든 값에 대해 작동하도록하려면이 하나를 시도하십시오 (x % count + count) % count

    +0

    +1 솔루션도 효과가있었습니다. 감사! – Alex

    +0

    @Alex 그것은 또한 작동 할 수 없다. 왜냐하면 Likurgs는 starting_index <= 0 일 때 나의 것과 다른 숫자를 제공하기 때문이다. – user1096188

    1

    에 한번 사용이 코드

    list1[Math.Sign((list1.IndexOf(starting_number) - 1))*(list1.IndexOf(starting_number) - 1) % list1.Count()] 
    
    관련 문제