Announcement

Collapse
No announcement yet.

Nicht alle Codepfade geben einen Wert zurück?!?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Nicht alle Codepfade geben einen Wert zurück?!?

    Hallo Leute.

    Ich habe mal eine Frage.
    Mein Programm will nicht ganz so wie ich es will.

    Hier ist mal der Quelltext.
    Ich habe 2 möglichenkeiten geschreiben. doch bei beiden kommt immer der selbe Fehler. CS 0161: Primzahlen.erstellen (int): Nicht alle Codepfade geben einen Wert zurück.

    Version 1:
    [highlight=c#]using System;
    using System.Collections.Generic;

    class Primzahl {


    public static List<int> erstellen(List<int> Primzahlen)
    {
    List<int> ergebnis = new List<int>();
    int zahl = 1;
    for (int zähler = 0; zähler > Primzahlen.Count; zähler++){

    if (zahl % 1 == 0 && zahl % zahl == 0 && zahl % 2 != 0)
    {
    ergebnis.Add(zahl);
    zahl++;

    return ergebnis;
    }
    }
    }


    public static void Main(){
    {
    Console.WriteLine("Geben sie den Wert ein");
    int anz = Convert.ToInt32(Console.ReadLine());
    List<int>Primzahlen = new List<int>(anz);
    Console.WriteLine("Die Primzahlen sind: " + erstellen(Primzahlen));
    }
    }
    }[/highlight]

    Version 2:

    [highlight=c#]using System;
    using System.Collections.Generic;

    class Primzahl {


    public static List<int> erstellen(int anz)
    {
    List<int> ergebnis = new List<int>();
    int zahl = 1;
    for (int zähler = 0; zähler > anz; zähler++){

    if (zahl % 1 == 0 && zahl % zahl == 0 && zahl % 2 != 0)
    {
    ergebnis.Add(zahl);
    zahl++;

    return ergebnis;
    }
    }
    }


    public static void Main(){
    {
    Console.WriteLine("Geben sie den Wert ein");
    Console.WriteLine("Die Zahlen sind: " + erstellen(Convert.ToInt32(Console.ReadLine())));
    }
    }
    }[/highlight]

    viellleicht hab ihr ne Idee wie ich diesen Fehler entfernen kann, weil mir leider nichts mehr einfällt.

    Danke schonmal im Vorraus.
    Gruß qura31
    Zuletzt editiert von qura31; 24.11.2010, 12:17.

  • #2
    Bitte formatiere deinen Code entsprechenden den Hinweisen hier. Sonst ist es echt zu mühselig deinen Code nach dem Problem zu durchforsten. Um deinen Beitrag zu überarbeiten findest du unterhalb von diesem den 'Editieren'-Button.

    Comment


    • #3
      Deine beiden erstellen-Methoden liefern nur einen Wert zurück wenn du auch im if in der jeweiligen For-Schleife landest. Es gibt aber keinen zwingenden Grund das man da auch immer hinkommt. Du brauchst also zwingend auch einen return nach der For-Schleife.

      Wenn ich deinen Code verstehe ist der eh falsch oder zumindest nicht das was du wolltest . Ich vermute dein return der jetzt innerhalb des if steht sollte auch eh hinter der for-schleife stehen.

      Comment


      • #4
        Ahhhh das ist mir jetzt auch aufgefallen.
        ja ich möchte das das Feld ergebnis am schluss ausgegeben wird, kein einzelner Wert sondern das Feld.

        Ich habe das nun mal so geändert und nun lässt es sich kompelieren und starten. nur als ausgabe bekomme ich nun nicht meine zahlen sondern.

        System.Collections.Generic.List`1[System.Int32]

        an was könnte das liegen.

        bin gerade im ersten Semester Wirtschaftsinformatik studium, deshalb bin ich noch nicht so der könner im Programmieren.

        Comment


        • #5
          Console.WriteLine("Die Primzahlen sind: " + erstellen(Primzahlen));
          Nun, Primzahlen ist eine List<int> ausgeben kann man aber natürlich nur strings. Darum wird im Hintergrund automatisch im obigem Code die ToString() Methode von Primzahlen aufgerufen. Die ToString() Methode von komplexen Objekten liefert den vollen Typbezeichner und nicht irgendeinen von die gewünschten Inhalt

          Wenn du die einzelnen Werte in deiner Liste ausgeben willst musst du schon über die Liste iterieren in string umwandeln und die Werte dann einzeln ausgeben oder zu einem string zusammenbasteln um sie dann in einem Rutsch ausgeben.

          Comment


          • #6
            Alles klar danke,
            aber ich habe keinen blassen schimmer wie dies funktioniert. Int in string umwandeln und so ist kein Thema, aber ein Feld da hab ich garkein plan wie das geht.

            Comment


            • #7
              Für das iterieren ist das Stichwort vor foreach. Das Beispiel in der Hilfe ist auch ähnlich deinem Problemchen. Umwandeln ist dabei kein Problem(ToString bei int liefert in diesem Fall wirklich dann den Wert als string).

              Comment


              • #8
                Ich habe nun mal meinen Quelltext überarbeitet.
                Habe das array int in string umgewadelt.

                [highlight=c#]public static List<string> erstellen(int anz)
                {
                List<int> ergebnis = new List<int>();
                List<string>ausgabe = new List<string>();
                string test;
                int zahl = 1;
                for (int zähler = 0; zähler > anz; zähler++){

                if (zahl % 1 == 0 && zahl % zahl == 0 && zahl % 2 != 0)
                {
                ergebnis.Add(zahl);
                zahl++;
                }
                }
                foreach(int i in ergebnis)
                { test = Convert.ToString(i);
                ausgabe.Add(test);
                }

                return ausgabe;
                [/highlight]

                Nun kommt ein ähnlicher Fehler.
                System.Collections.Generic.List`1[System.String]

                Was habe ich nun falsch gemacht?
                Bin schon leicht am Verzweifeln.

                Comment


                • #9
                  Wenn du dort wo du die Liste ausgeben willst wiederum die ToString Methode der Liste aufrufst erhältst du natürlich wieder die Typbezeichnung. Gleiches Problem wie zuvor bei List<int>. Es ist egal welchen Typ du als generischen Parameter in der Liste benutzt bei ToString wird immer die Typbezeichnung zurückkommen.

                  Du brauchst die Schleife bei der Ausgabe dort kannst du dann beim Ausgeben nebenbei von int in string umwandeln vorher zu wie du das in deiner Methode machst hilft das nicht. Sie dir nochmal in der Hilfe zu foreach das Beispiel an. Dort ist es zwar int Array und keine Liste von int. Der dort gezeigte Weg ist bei dir aber genauso anwendbar.

                  Comment


                  • #10
                    String.Join ist auch sehr empfehlenswert wenn Du eine Liste hast die einfach mit einem Zeichen dazwischen in einen String gewandelt wird.

                    z.B.:

                    [highlight=c#]
                    var myList = new List<String>() { "hallo","wie","geht","es","dir" };

                    var ausgabe = String.Join("#",myList);

                    //ausgabe -> "hallo#wie#geht#es#dir"
                    [/highlight]

                    Comment


                    • #11
                      String.Join ist auch sehr empfehlenswert wenn Du eine Liste hast die einfach mit einem Zeichen dazwischen in einen String gewandelt wird.

                      z.B.:

                      [highlight=c#]
                      var myList = new List<String>() { "hallo","wie","geht","es","dir" };

                      var ausgabe = String.Join("#",myList);

                      //ausgabe -> "hallo#wie#geht#es#dir"
                      [/highlight]

                      Comment

                      Working...
                      X