CSharp Bereiche von Listen von Zahlen ausgeben
Hallo
Ich hab noch ein Problem. Ich dachte, das wäre in 5-10 Minuten erledigt, aber ich schaffe es einfach nicht...
Ich habe ein Array von Integer zum Beispiel
(Das Array ist immer positiv, geht immer aufwärts und es kommt keine Zahl doppelt vor).
Ich möchte nun, dass mir das Programm folgendes ausgibt:
Folgendes habe ich mir zuerst überlegt, bin aber daran gescheitert, da es mit zu komplex geworden ist.
Danach habe ich folgendes entworfen, womit ich schon zufriedener bin:
(Mein Algorithmus im Code geht davon aus, dass der Abstand zwischen Index und Wert immer derselbe ist, wenn die Zahlenreihe fortgesetzt wird)
Bei letzterem sei angemerkt, dass es teilweise funktioniert.
1. Problem ist, dass es zwar bei dem Array
funktioniert, nicht aber bei
da es anscheinend nicht funktioniert, wenn die erste Zahl alleine steht und keinen "Nachbarn" hat
2. Problem ist, dass die letzte Zahl (39) nicht auftaucht.
Ich versuche das jetzt schon seit 3 Stunden und habe das vor ein paar Wochen schon einmal aufgegeben.
Ich bin sicher, dass da nur ein kleiner Verständnisfehler ist und dass es eigentlich ganz einfach ist.
Kann mir bitte jemand einen kleinen Denkanstoß geben?
Gruß
Christopher
Ich hab noch ein Problem. Ich dachte, das wäre in 5-10 Minuten erledigt, aber ich schaffe es einfach nicht...
Ich habe ein Array von Integer zum Beispiel
{ 4, 6, 7, 8, 9, 11, 14, 15, 19, 22, 23, 39}
Ich möchte nun, dass mir das Programm folgendes ausgibt:
4
6-9
11
14-15
19
22-23
39
Folgendes habe ich mir zuerst überlegt, bin aber daran gescheitert, da es mit zu komplex geworden ist.
for (int i = 1; i<values.Count(); i++)
{
if (values[i - 1] == values[i] - 1)//Kette geht weiter!
{
_to = values[i];
if (i == values.Count()-1) listBox1.Items.Add(_from + " - " + _to);
}
else //Kette unterbrochen
{
listBox1.Items.Add(_from + " - " + _to);
_from = values[i];
if (i != values.Count()-1 && values[i] + 1 < values[i + 1])
{
listBox1.Items.Add(_from);
_from = values[i + 1];
i++;
}
}
}
Danach habe ich folgendes entworfen, womit ich schon zufriedener bin:
List<int> list = new List<int>() { 4, 6,7,8, 9, 11, 14,15, 19, 22, 23, 39}; // testDaten
int olddiff = 0;
string add = "";
for (int i = 0; i<list.Count(); i++)
{
int item = list[i];
int diff = item - i;
if (diff == olddiff | i == 0)
{
add += item + " ";
}
else
{
if (add=="")
{
listBox1.Items.Add(list[i-1]);
add += item + " ";
}
else
{
listBox1.Items.Add(add);
add = "";
}
}
olddiff = diff;
}
(Mein Algorithmus im Code geht davon aus, dass der Abstand zwischen Index und Wert immer derselbe ist, wenn die Zahlenreihe fortgesetzt wird)
Bei letzterem sei angemerkt, dass es teilweise funktioniert.
1. Problem ist, dass es zwar bei dem Array
{ 2, 3, 4, 6, 7, 8, 9, 11, 14, 15, 19, 22, 23, 39}
{ 4, 6, 7, 8, 9, 11, 14, 15, 19, 22, 23, 39}
2. Problem ist, dass die letzte Zahl (39) nicht auftaucht.
Ich versuche das jetzt schon seit 3 Stunden und habe das vor ein paar Wochen schon einmal aufgegeben.
Ich bin sicher, dass da nur ein kleiner Verständnisfehler ist und dass es eigentlich ganz einfach ist.
Kann mir bitte jemand einen kleinen Denkanstoß geben?
Gruß
Christopher
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 333343
Url: https://administrator.de/contentid/333343
Ausgedruckt am: 25.11.2024 um 00:11 Uhr
1 Kommentar