HINWEIS: Dies ist kein Duplikat, ähnliche Fragen nach Namen und Thema erklären dies nicht.Index war außerhalb der Grenzen des Arrays - For Schleife
Ich versuche, ein Array von Zahlen in numerischer Reihenfolge zu sortieren, während auch alle Zahlen, die um eins von der vorherigen inkrementieren, zusammenfallen, so dass 921.922.923 zu 921-923 wird.
Der Code, den ich schrieb:
static string FormatReceiptNumbers(int[] numbers)
{
int[] sortedNumbers = numbers;
Array.Sort(sortedNumbers);
string output = "";
//Sort through each element
for(int x = 0; x < sortedNumbers.Length; x++)
{
//Check for Incrementing value
if(x > 0 & sortedNumbers[x] == sortedNumbers[x - 1] - 1)
{
//Check if incrementing value doesn't keep going
for(int y = x; y < sortedNumbers.Length; y++)
{
//check if incrementing values end
if(sortedNumbers[y] != sortedNumbers[y - 1] - 1)
{
output = output + " - " + sortedNumbers[y];
//Check if at end of array
if(y != sortedNumbers.Length)
{
x = y; //Keep going
break;
}
else
{
output.Remove(0, 2);
return output;
}
}
}
}
//if no incrementing value is found add number to input
else
{
output = output + ", " + sortedNumbers[x].ToString();
}
}
//Each addition to the string adds ", " to beginning, remove the first one, and return value
return output.Remove(0, 2);
}
Dies ist, was ich benutzen musste:
Die Funktion sollte drehen dies:
892, 893, 894, 895, 906, 920, 845
Zu diesem:
845, 892-895, 906, 910
Dies ist, wie es nur für zusätzliche Informationen ausgeführt wurde:
public static void Main(string[] args)
{
int[] input = {892, 893, 894, 895, 906, 845};
Console.WriteLine(FormatReceiptNumbers(input));
Console.ReadLine();
}
jedoch bei der Ausführung, es gibt diesen:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at Rextester.Program.FormatReceiptNumbers(Int32[] numbers)
at Rextester.Program.Main(String[] args)
HINWEIS: Ich verwende einen Online-Compiler, der den Rextester erklärt Ich bin ziemlich sicher, dass dies nicht die Ursache des Problems ist.
Wenn jemand mir helfen könnte, die Ursache des Problems zu verstehen, würde ich es sehr schätzen. Ich sehe nicht, wie x (oder y?) Außerhalb der Grenzen gehen kann, da ich das Limit für die Array-Länge gesetzt habe. Danke im Voraus!
Danke, ich werde dies als die Antwort markieren, wenn ich kann. Das passiert, wenn Sie einen Online-Compiler verwenden, ohne zu sagen, was ich falsch mache. –
Ah ja, so könnte es passieren. ;) – Ian