foreach und forschleifen in c#?
Aufgabe: In das Array *zahlen* werden von der Konsole 5 Zahlen eingelesen. Geben Sie auf der Konsole den Text "Alle durch 3 teilbar!" aus, wenn alle Zahlen in *zahlen* durch 3 teilbar sind. Ansonsten geben Sie "Nicht alle durch 3 teilbar!" aus.
Diese Aufgabe hab ich mit einer forschleife gelöst, aber wenn ich die forschleife "for(int i = 0; i<zahlen.Length;i++)" mit der foreach schleife "foreach(int i in zahlen)" ersetze, wird mir ein Fehler angezeigt. Eigentlich müsste es mit einer Foreach-schleife auch funktionieren. Warum funktioniert es aber nicht?
Den Fehler kriege ich bei den Werten: 3,6,9,12,15
Mein Code:
using System;
class Program
{
public static void Main(string[] args)
{
int[] zahlen = new int[5];
bool durch3teilbar = false;
for (int i = 0; i < 5; i++)
{
zahlen[i] = Convert.ToInt32(Console.ReadLine());
}
for(int i = 0; i<zahlen.Length;i++)
{
if(zahlen[i]%3==0)
{
durch3teilbar = true;
}
else
{
durch3teilbar = false;
break;
}
}
if(durch3teilbar ==true)
{
Console.WriteLine("Alle durch 3 teilbar!");
}else
{
Console.WriteLine("Nicht alle durch 3 teilbar!");
}
}
}
Du solltest die fehlermeldung mit angeben. Und den Code der nicht Funktioniert. Nicht den Code der funktioniert.
Nurdie forschleife durch die foreachschleife ersetzen, Rest ist gleich
Fehlermeldung: Unhandled exception. System.IndexOutofRangeException: Index was outside the bounds of the array
3 Antworten
if(zahlen[i]%3==0)
Wenn du eine Foreach nutzt musst du auch diese zeile hier entsprechend abändern.
Als beispiel: du hast das Array mit den Zahlen: 5 3 und 1
Dann gibt dir die foreach als erstes die 5 aus.
wenn du aber zahlen[5] aufrufen möchtest. Kriegste ne array out of bounds exception. Weil dein array ja nur 3 werte hat und du den sechsten abrufen wollen würdest. Was ja nicht geht.
stattdessen musst du halt einfach nur i%3 rechnen.
Als Tipp: nutzt keine bezeichner für iterationsvariablen in foreach schleifen. Also nicht i,k,l usw. Sondern gibt dem ding nen richtigen namen. Wie z.b. nCurrentInt. etc. Damit du weisst das es sich hier nicht um einen Index in einem array handelt. Sondern um eben einen konkreten wert.
Bei einer foreach Schleife setzt dir das Framework die Abbruchbedingung bzw. Schleifendauer automatisch, indem du die Liste oder das Array übergibst.
Dementsprechend müsste der Kopf der Schleife etwa so aussehen:
foreach(int zahl in zahlen)
{
// "zahl" entspricht dem zahlen[i], nur ohne den Array-Zähler
}
Liebe Grüße, Knom
Zu musst schon ein bisschen mehr anpassen als nur den schleifen Aufruf.
Nach dem foreach... Funktioniert zahlen[i] auch nicht mehr so richtig.
Nutze beim foreach lieber value bzw val statt i das für einen Zähler steht