Announcement

Collapse
No announcement yet.

Fehler: Nicht alle Codepfade geben einen Wert zurück.

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

  • Fehler: Nicht alle Codepfade geben einen Wert zurück.

    Hallo Zusammen,

    ich brauche hilfe bei der Fehlermeldung "Nicht alle Codepfade geben einen Wert zurück." Ich finde einfach nicht raus was er von mir will.

    Hier mal der Code vielleicht könnt ihr mir helfen.


    Code:
    //Auswahl 5
    
    string eingabe = Console.ReadLine(); //Variable deklariert und Wert von der Console einlesen
            double zahl = 0;//neue Variable vom Typ int deklarieren und mit 0 füllen
            public int zahl1 = 0;
            public string ergebnis;              //neue Variable vom Typ public string deklarieren 
           
     //neue Methode geradereihe erstellen
            public string geradereihe(string ergebnis)
            {
                //variable "zahl" mit Wert aus Variable "eingabe" füllen und in Typ int16 umwandeln.
                int zaehler = 1;
                zahl1 = Convert.ToInt32(eingabe);
                //While Schleife deffinieren. Schleife läuft so lange bis Zahl 
                while (zaehler <= zahl1)
                {
                    if (zaehler % 2 == 0)
                    {
                        return ergebnis = zaehler.ToString();
                    }
                    zaehler++;
                }
            }
    Der Code soll mir letzendlich nur alle geraden zahlen zwischen null und der eingegeben zahl in die Console schreiben.
    z.b. 2 und 4 wenn ich 4 eingebe.

    Beste Grüße

    Andy

  • #2
    Irgendwie verstehe ich die Methode nicht Es läuft eine Schleife mit einem Zähler solange dieser kleiner oder gleich der eingegebenen Zahl? ist. Wenn es eine gerade Zahl ist wird diese zurückgegeben? Die erste und nur die? Wozu dient ergebnis? Dies ist ein Parameter, der der Methode zur Verarbeitung übergeben wird. Gleichzeitig gibt es diese Varaible noch als Membervariable? Denke, das wäre nochmal zu überarbeiten und der Fehler dürfte daher rühren, dass wenn die Schleife zu Ende ist, kein Rückgabewert zurückgegeben wird. Das die Schleife "hart" beendet wird, kann der Compiler nicht erkennen
    Christian

    Comment


    • #3
      Hallo Christian,

      danke für die schnelle Antwort.

      Also das ganze soll ein kleines Rechenprogramm werden. Die Variable "ergebnis" soll das ergebnis der verschiedenen Berechnungen zurück an die Hauptklasse übergeben und in die Konsole schreiben.

      Hier der Aufruf aus der Hauptklasse:
      [highlight=c#]{
      //Hinweis für den User in die Konsole schreiben
      Console.WriteLine("Bitte geben Sie eine Zahl ein");
      // neue Klasse erstellen
      rechnen rechenMethoden = new rechnen();
      // Methode "gerade" der Klasse rechnen aufrufen und das Ergebnis in die Konsole schreiben.
      Console.WriteLine(rechenMethoden.geradereihe(ergeb nis));
      //Auf eingabe des Users warten.
      Console.ReadLine();
      } [/highlight]

      Wenn ich alles nur in einer Klasse schreibe ohne die Methode auszulagen klappt das.

      Sieht dann so aus:
      [highlight=c#]{

      Console.WriteLine("Bitte geben Sie die Anzahl Zahlen ein");
      // Variable deklariert und Wert von der Konsole einlesen
      string _eingabe = Console.ReadLine();
      int _n = Convert.ToInt16(_eingabe);
      int zaehler = 1;

      while (zaehler <= _n)
      {
      if (zaehler % 2 == 0)
      {
      Console.WriteLine(zaehler);
      }
      zaehler++;
      }

      Console.ReadLine();
      }
      [/highlight]
      Zuletzt editiert von Blade; 09.07.2013, 14:29.

      Comment


      • #4
        Sicherlich klappt das dann, weil du ja die Schleife nicht verläßt, sondern den Wert gleich in die Console schreibst. Wenn du das in eine extra Methode auslagerst, dann muss du entweder dort auch in die Console schreiben (Dann hat die Methode keinen Rückgabewert) oder du sammelst alle gefundenen Wert ein einer Liste, die ist dann der Rückgabewert und gibst die Liste dann aus
        Christian

        Comment


        • #5
          Kannst Du mir eine von beiden Methoden mal erklären, da bin ich echt überfordert.

          Ich glaube die Ausgabe aus der Methode heraus wäre cool

          Comment


          • #6
            public void geradereihe(string eingabewert)
            {
            int zaehler = 1;
            zahl1 = Convert.ToInt32(eingabewert);
            while (zaehler <= zahl1)
            {
            if (zaehler % 2 == 0)
            {
            Console.WriteLine(zaehler);
            }
            zaehler++;
            }
            }

            Aufruf mit dem vom Nutzer eingegebenen Wert
            Zuletzt editiert von Christian Marquardt; 09.07.2013, 15:30.
            Christian

            Comment


            • #7
              Ok das scheint schon fast zu funktionieren nur wird die methode nicht aufgerufen.

              Console.WriteLine(rechenMethoden.geradereihe(ergeb nis)); kann ich ja jetzt nicht mehr zum aufruf verwenden.

              Comment


              • #8
                rechenMethoden.geradereihe(EINGABE_DES_NUTZERS); Mit dem Wert der Eingabe des Nutzers
                Christian

                Comment


                • #9
                  Ok Vielen Dank noch mal.

                  Eine Kleinigkeit noch. Ich muss die Eingabe jetzt zwei mal machen. Direkt hintereinander. Irgendwas ist doppelt.
                  Schau mal:
                  [HIGHLIGHT=c#]
                  string eingabe = Console.ReadLine();
                  rechenMethoden.geradereihe(eingabe);[/HIGHLIGHT]

                  Comment


                  • #10
                    ich sehe nichts doppeltes
                    Christian

                    Comment


                    • #11
                      Ich verzweifle hier echt.

                      Ich muss die Eingabe immer wiederholen.
                      Nach der ersten Eingabe einer Zahl und Enter kommt nichts. Muss die Zahl immer ein zweites Mal eingeben. Erst dann läuft er in die Methode rein.

                      Noch mal alles zusammen:

                      Programm:
                      [HIGHLIGHT=C#]
                      else if (auswahl == "5")
                      {
                      //Hinweis für den User in die Konsole schreiben
                      Console.WriteLine("Bitte geben Sie eine Zahl ein");
                      // neue Klasse erstellen
                      rechnen rechenMethoden = new rechnen();
                      // Methode "gerade" der Klasse rechnen aufrufen und das Ergebnis in die Konsole schreiben.
                      string eingabe1 = Console.ReadLine();
                      rechenMethoden.geradereihe(eingabe1);
                      //Auf eingabe des Users warten.
                      Console.ReadLine();
                      }
                      [/HIGHLIGHT]

                      Methode:

                      [HIGHLIGHT=C#]
                      public void geradereihe(string eingabe1)
                      {
                      //variable "zahl" mit Wert aus Variable "eingabe" füllen und in Typ int16 umwandeln.
                      zahl1 = Convert.ToInt32(eingabe1);
                      //While Schleife deffinieren. Schleife läuft so lange bis Zahl
                      while (zaehler <= zahl1)
                      {
                      if (zaehler % 2 == 0)
                      {
                      Console.WriteLine(zaehler);
                      }
                      zaehler++;
                      }
                      }
                      [/HIGHLIGHT]

                      Comment


                      • #12
                        Debugge, setze Breakpoints
                        Christian

                        Comment


                        • #13
                          Da wir hier nur Codeausschnitte sehen ist es auch schwierig für uns einen Fehler zu sehen, evtl. ist die erste Eingabe Aufforderung an einer ganz anderen Stelle, die aus irgendeinem Grund ebenfalls durchlaufen wird. Schau Dir mal den ganzen Code an.

                          Comment


                          • #14
                            Originally posted by Blade View Post
                            Hallo Zusammen,

                            ich brauche hilfe bei der Fehlermeldung "Nicht alle Codepfade geben einen Wert zurück." Ich finde einfach nicht raus was er von mir will.

                            Hier mal der Code vielleicht könnt ihr mir helfen.


                            Code:
                            //Auswahl 5
                            
                            string eingabe = Console.ReadLine(); //Variable deklariert und Wert von der Console einlesen
                                    double zahl = 0;//neue Variable vom Typ int deklarieren und mit 0 füllen
                                    public int zahl1 = 0;
                                    public string ergebnis;              //neue Variable vom Typ public string deklarieren 
                                   
                             //neue Methode geradereihe erstellen
                                    public string geradereihe(string ergebnis)
                                    {
                                        //variable "zahl" mit Wert aus Variable "eingabe" füllen und in Typ int16 umwandeln.
                                        int zaehler = 1;
                                        zahl1 = Convert.ToInt32(eingabe);
                                        //While Schleife deffinieren. Schleife läuft so lange bis Zahl 
                                        while (zaehler <= zahl1)
                                        {
                                            if (zaehler % 2 == 0)
                                            {
                                                return ergebnis = zaehler.ToString();
                                            }
                                            zaehler++;
                                        }
                                    }
                            Der Code soll mir letzendlich nur alle geraden zahlen zwischen null und der eingegeben zahl in die Console schreiben.
                            z.b. 2 und 4 wenn ich 4 eingebe.

                            Beste Grüße

                            Andy

                            Wenn du eine Funktion baust mit einem Rückgabewert String, dann soll sie diesen auch zurück geben durch return ""; z.b..
                            ansonsten würde ich bei dieser Funtkion den rückgabetyp void empfehlen (also keinen).

                            Comment


                            • #15
                              [HIGHLIGHT=C#]
                              else if (auswahl == "5")
                              {
                              //Hinweis für den User in die Konsole schreiben
                              Console.WriteLine("Bitte geben Sie eine Zahl ein");
                              // neue Klasse erstellen
                              rechnen rechenMethoden = new rechnen();
                              // Methode "gerade" der Klasse rechnen aufrufen und das Ergebnis in die Konsole schreiben.
                              // string eingabe1 = Console.ReadLine();
                              // rechenMethoden.geradereihe(eingabe1);
                              rechenMethoden.geradereihe(Console.ReadLine()); //Auf eingabe des Users warten.
                              Console.ReadLine();
                              }
                              [/HIGHLIGHT]

                              probier das mal

                              Comment

                              Working...
                              X