Index out of Range exception in C# bei der Iteration durch ein array
Habe ich diesen code verwende ich um ein Programm zu erstellen, dass dauert ein range-und Ausgänge der Konsole die Primzahlen. Ich habe ein problem, ich versuche eine Iteration durch das array, das ich gebaut habe, damit die Schleife sollte nur das schreiben in die Konsole die Werte, die Primzahlen sind mit meiner Methode den Rückgabewert. Das problem das ich habe ist, dass ich die zweite Bedingung festgelegt numArray.Length
aber es scheint mir die Index out of Range Exception
. Ich will einfach nur die Schleife Durchlaufen und alle Werte in der numArray
und zu stoppen, wenn es fertig ist, herauszufinden, ob der Letzte Wert eine Primzahl ist oder nicht.
public struct Prime
{
public int x;
//constructor for Prime
public Prime(int x1)
{
x = x1;
}
public int IsPrime(int number)
{
int i;
for (i = 2; i * i <= number; i++)
{
if (number % i == 0) return 0;
}
return 1;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter an Integer");
int num1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter a Second Integer of Greater Value");
// int num2 = 0;
int num2 = Convert.ToInt32(Console.ReadLine());
/* if (num2temp > num1)
{
num2temp = num2;
}
else
{
Console.WriteLine("You Did Not Enter An Integer Greater Than the First Integer, Please Enter Your Integers Again.");
Environment.Exit(0);
}
*/ int index = 1;
int[] numArray = new int[num2];
for (int i = num1; i <= num2; i++)
{
numArray[index] = i;
Console.WriteLine(" index: {0} assignment: {1}", index, i);
index++;
Console.WriteLine("index: {0}",index);
}
Console.WriteLine("value: {0}", numArray[40]);
/* Prime myprime = new Prime();
if (myprime.IsPrime(numArray[12]) == 1)
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("False");
} */
Prime myprime = new Prime();
int value = 0;
for (int y = 1; y <= num2; y++)
{
if (myprime.IsPrime(numArray[y]) == 1)
{
value = numArray[y];
Console.Write("{0} \t", value);
}
}
InformationsquelleAutor thewrongadvice | 2013-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie derzeit versuchen, zu iterieren, bis zu einschließlich die Größe des Arrays. Arrays sind 0-indiziert, in C#. Also diese:
werden sollte:
Und beachten Sie, dass, um auf das erste element array
num1
müsste 0 sein, nicht 1.Ebenso Ihre anfänglichen Zuordnung von
index
als1
sollte0
statt. Im Grunde müssen Sie gehen Sie durch alle Ihre code (es ist verwirrend im moment mit vielen bits auskommentiert), und überprüfen Sie überall, wo Sie gehen davon aus, arrays sind 1-basiert, und stattdessen ändern Sie Ihren code wie Sie sind 0-basiert.(In einigen Fällen können Sie nur wollen, um das array größer, natürlich. Wenn Sie möchten, ein array, die logischerweise mit den Werten 1 bis x inklusive, Sie können entweder erstellen Sie ein array der Größe x und subtrahieren eins von jedem index die ganze Zeit, oder erstellen Sie ein array der Größe x + 1.)
Ja, im Grunde. Aber es lohnt sich, das Verständnis warum , ist.
InformationsquelleAutor Jon Skeet
Index startet ab 1 sondern ab 0:
dann hier y sollte auch 0 sein, und überprüfen sollte, wenn es weniger als num2:
weil die Indizierung von Arrays in C# starten von 0.
InformationsquelleAutor gzaxx