C# Kleine Frage zu Schleife bzw. Variable

Hello_Krittie

Cadet 4th Year
Registriert
Dez. 2014
Beiträge
110
Hallo Leute,

ich möchte ein Programm schreiben das mir die werte in einem Array zusammenzählt und ausgibt.
Daher wenn in einem wert 1 , 2 und 3 steht ist die Summe = 6.

Habe es so gemacht:

Code:
class Program
    {
        static void Main(string[] args)
        {

            int[] arr = new int[] { 1, 2, 3, 4 };
            int sumArray = null;

            for (int i = 0; i <= arr.Length; i++)

            {

                int sumArray = +arr[i];




            }
            Console.WriteLine(sumArray);


        }
    }
}

Leider bekomme ich eine Fehlermeldung in der Schleife das sumArray nicht initialisiert werden kann.
Wieso?

Mit google hab ich nichts gefunden und i bin noch Anfänger.
Ich habe es auch probiert das ich die Variable vor der Schleife nicht initialisiere und auch mal statt null / 0 genommen.

Danke + Lg
 
nimm mal beim sumarray innerhalb der Schleife das int weg und schreib sumArray += arr;
Außerhalb int sumArray = 0;
 
Das Problem ist, dass du in der Schleife schreibst:
int sumArray...
du musst aber schreiben sumArray.
 
Edit: Hier stand Mist.

Hinweis: Ich vermute, dass deine Schleife auch zu lang läuft. Dein Array hat eine Länge von 4 und deine Schleife zählt von 0 bis arr.Length, also bis 4, was aber 5 Durchläufe sind. Es müsste wohl bis arr.Length-1 gehen.
 
Super Danke Leute.

Ich hab auch noch gesehen das ich in der Schleife nicht <= nehmen muss sondern nur < da es ja sonst über den Index geht. Leider bekomme ich jetzt in der Konsole 4 angezeigt bei den Zahlen 1, 2, 3, 4 :D Muss ich nochmal gucken was ich falsch gemacht habe mit dem Debugger.
Danke jedenfalls :)
/edit: @Reglohln ja hast Recht. Aber ob ich Length -1 oder < nehme sollte egal sein richtig?
 
Deine Variable wird innerhalb der Schleife angelegt und ist nur innerhalb der Schleife gültig. Wenn du den Inhalt außerhalb der Schleife ausgeben willst, musst du die Variable auch außerhalb anlegen. In deinem Fall hast du quasi 2x die gleiche Variable angelegt. Sobald du die Schleife verlässt, ist sumArray = NULL.

Lösung:
Nimm das int vor deiner Variable innerhalb der Schleife weg.
 
Du inititalisierst sumArray zweimal -> erster Fehler
Du initialisierst in der Schleife und willst auf das Ergebnis ausserhalb zugreifen -> zweiter Fehler
du initialisierst mit null und nicht mit 0 -> dritter Fehler
Deine Schleife läuft zu weit -> vierter Fehler
 
Versuch mal so wie unten.
i <= arr.length erlaubt auch 4. 0 bis 4 ergibt aber 5 durchläufe.
Ausserdem war "int sumArray" zwei mal deklariert ( einmal ausserhalb und einmal innerhalb der Schleife)
Und:
Code:
int sumArray = null;
erzeugt dann in der Schleife beim ersten Durchlauf

"null + 1"
-> exception. Also besser

Code:
int sumArray = 0;


Hello_Krittie schrieb:
Code:
class Program
    {
        static void Main(string[] args)
        {

            int[] arr = new int[] { 1, 2, 3, 4 };
            int sumArray = 0;

            for (int i = 0; i < arr.Length; i++)

            {

                 sumArray += arr[i];




            }
            Console.WriteLine(sumArray);


        }
    }
}

Edit: Oh, vieeeeel zu langsam ;)
 
Zuletzt bearbeitet:
So noch ein Fehler hatte = +arr drin statt += arr

Nun funktioniert es :)
Danke für die große Hilfe und vor allem so schnell um die Zeit.
 
Du könntest als Alternative auch einfach folgendes für die Schleife nehmen:

Code:
foreach (int zahl in arr)
{
sumArray += zahl;
}

Dann ist es egal wie viele Zahlen du im Array zum Zusammenzählen hast und du musst auch nicht mit Indexen arbeiten.
 
Danke für die alternative.
Hintergrund ist der das ich auf hackerrank.com angemeldet bin und da bekommt man kleine Probleme die es zu lösen gilt.
Und meine Lösung hat gepasst ging aber mit der foreach Schleife viel leichter. An die hab ich gar nicht gedacht.
Ich hätte ein weiteres "Problem". Evtl. kann mir hier noch wer nen Tipp geben:

Code:
static void Main(String[] args) {
        int n = Convert.ToInt32(Console.ReadLine());
        string[] arr_temp = Console.ReadLine().Split(' ');
        int[] arr = Array.ConvertAll(arr_temp,Int32.Parse);
        
        int sumArray = 0;
        
        for (int i = 0; i < arr.Length; i++)
        {
            
            if((n <= 10 && n >= 1) && (arr[i] <= Math.Pow(10, 10) && arr[i] >= 0))
                sumArray += arr[i];
                
            
        }
        Console.WriteLine(sumArray);
        Console.ReadLine();
        
    }

Zahlen die eingegeben werden: 5
1000000001 1000000002 1000000003 1000000004 1000000005 (so will es die Aufgabe).

Es sollte raus kommen: 5000000015

Bei mir kommt raus: 705032719

Nun wieso die if Abfrage? Es ist auch Teil der Aufgabe:

Input

The first line of the input consists of an integer N. The next line contains N space-separated integers contained in the array.

Constraints
1≤N≤10
0≤A≤10hoch10

Theoretisch sollte ja if true sein und daher einfach die 5 Werte zusammen zählen. Kommt aber trotzdem ein falscher Wert raus.

Danke schon mal :P
 
Zuletzt bearbeitet:
ist nicht Sinn und Zweck solcher Aufgaben, dass du die selber löst?
 
Ja ich hab das ja selbst geschrieben und herum probiert aber ich komm einfach nicht dahinter wieso er das so komisch zusammen zählt.
Ich bin wirklich blutiger Anfänger und muss noch etwas in die richtige Richtung gelenkt werden daher erhoffe ich mir hier ein paar Tipps von den Experten :)
 
Dann lenk ich dich mal: setz dich mal mit den verschiedenen Variablentypen auseinander ;)

und des beste Tipp überhaupt: Debugging! und wenn du dir nur die Werte in der Konsole anzeigen lässt, die du verarbeitest. Du wirst erstaunliches feststellen :D
 
Ahhhhh Danke danke :D

Dieser kleine Tipp hat mir schon geholfen. Hab jetzt long benutzt und siehe da es funktioniert.
Das war zu lang für nen int.

Ich lerne mit nem Udemy Kurs und dem Buch "Schrödinger programmiert C#". Ich hab das schon gelernt nur hab ich da jetzt gar nicht dran gedacht :D
 
*hust* Ich hab nichts gesagt. Das hast du gaaaaanz alleine geschaftt ;)

Ansonsten kann ich dir die Galileo OpenBooks sehr ans Herz legen. Kannst da entweder die C# oder die Java Bücher mal anschauen. Die Basics sind eigentlich immer die selben, die Sprache ist ähnlich. Nur ein paar Eigenheiten sind halt unterschiedlich
 
Jap mit dem Openbook C# 2012 vom Rheinwerk Verlag (ehemalig Galileo Press) arbeite ich auch sehr viel. Momentan geh ich da grad Klassen durch.
 
nicht böse gemeint: Aber schau dir unbedingt die basics nochmal intensiv an. Der Ursprungspost hat in sowenigen Zeilen soviele Fehler. Das waren "finde die Fehler" Klausuraufgaben in der 9. Klasse bei uns ;) Also wirklich pipifax.
Versuch nicht möglichst schnell möglichst viele Aufgaben zu machen sondern halt dich an eine und schau dir auch an wo und warum die Fehler waren. Nur das trägt zum grundlegenden Verständnis bei und das ist nunmal essentiell.
 
Zurück
Oben