2012-04-11 3 views
0

Ich habe eine Liste. Wenn der von Ihnen eingegebene Wert in dieser Liste enthalten ist, wird das Ergebnis zurückgegeben. Auch wenn der Wert außerhalb des Ergebnisbereichs liegt - Ergebnis wird wegen mod% zurückgegeben. Es ist wirklich schwer, mein Problem mit Worten zu erklären, können so auf den Code werfen Sie einen Blick:Rückgabe von Werten aus der Liste für Indizes, die außerhalb des Bereichs der Liste sind mit 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. Diese Zahl ist konstant. Alle Messungen werden in Bezug auf diese Nummer gemacht.
  • Wert - der Wert, den wir eingegeben haben. wir müssen das Ergebnis für diesen Wert
  • Ergebnis erhalten - nur einen String

Das ist, wie es funktioniert:

starting_number = 3, Wert = 2 => result = "noo" (weil 2 = IndexOf (starting_number) - 1)

starting_number = 6, Wert = 0 => result = "cool" (6 + 1 = 0)

starting_number = 0, Wert = 6 =>Fehler wird auftreten. (0 - 1 = 6)

irgendwelche Ideen, wie man den Code verbessert, um diesen Fehler loszuwerden? Grundsätzlich kann ich Werte greifen, wenn sie "nach" startnummer sind, aber ich kann sie nicht "vor" startnummer anfassen.

  • bei (6 + 1 = 0): Liste sieht wie folgt aus 6,0,1,2,3 ...

  • bei (0 bis 1 = 6): Liste sollte dies ... 4,5,6,0

, wenn Sie Fragen haben, wenden Sie sich bitte .. es ist wirklich schwer, das Problem mit Worten zu erklären, aber ich denke Beispiele gemacht es ist klarer.

Wie greifen Sie Werte, die unter Startnummer liegen?

+2

Sie haben nicht wirklich eine Frage gestellt ... –

+0

irgendwelche Ideen, wie Sie den Code verbessern diesen Fehler loswerden? Grundsätzlich kann ich Werte greifen, wenn sie "nach" startnummer sind, aber ich kann sie nicht "vor" startnummer anfassen. – Alex

+0

was führt uns zu: ** Wie greifen Sie Werte, die unter Startnummer sind? ** – Alex

Antwort

3

Wenn ich richtig verstehe, wollen Sie alle ganzen Zahlen abzubilden 0 bis Bereich bis Count-1 und Ihre aktuelle Formel x % count die funktioniert nur, wenn x > 0. Dann, wenn Sie wollen, dass es für alle Werte von x funktioniert, versuchen Sie diese

+0

+1 Ihre Lösung hat auch funktioniert. Vielen Dank! – Alex

+0

@Alex kann es auch nicht funktionieren, da dir Likurgs eine andere Nummer gibt als meine beim Start_index <= 0 – user1096188

1

Ausprobieren Verwenden Sie diesen Code

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