2017-06-26 6 views
-1
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Menu_Attempts 
{ 
    class Program 
    { 
     static void Main(string[] args) 

     { 
      bool forever = true; 
      do 
      { 
       Console.WriteLine("1. Stone to Pounds"); 
       Console.WriteLine("2. Quit"); 

       int reply = Convert.ToInt32(Console.ReadLine()); 
       switch (reply) 
       { 
        case 1: 
         Console.WriteLine("Enter an amount in Stone"); 
         double UserInput = double.Parse(Console.ReadLine()); 
         StoneToPounds(UserInput); 

         break; 
        case 2: 
         Console.WriteLine("You've decided to quit."); 
         forever = false; 

         break; 

       } 
      } while (forever); 

     } 

     public static double StoneToPounds(double number) 
     { 
      double answer = number * 14; 
      return answer; 
     } 

    } 
} 

Also ich versuche, ein konsolenbasiertes Menü zu erstellen und Methoden aufzurufen, wenn es benötigt wird, um es zu bereinigen. Ich wähle Option 1. um Stein in Pfund umzuwandeln und es gibt mir die Möglichkeit, eine Zahl einzugeben. Aber wenn ich es mache, kehrt ich einfach zum Menü zurück?C# Methoden werden nicht in der switch-Anweisung aufgerufen?

+5

Sie nie ausgeben/schreiben das Ergebnis von StoneToPounds() ... –

+6

Sie tun nichts mit dem Rückgabewert von 'StoneToPounds'. Es wird aufgerufen, Sie sehen nur keine Ausgabe von ihm, Ihre Do While-Schleife startet dann wieder wie erwartet – Thewads

+0

'Console.WriteLine (StoneToPounds (UserInput));'? –

Antwort

2

Ja, Ihre Methode wird aufgerufen (und Sie können das beweisen, indem Sie einen Haltepunkt hinzufügen), aber Sie tun nichts mit dem Methodenergebnis StoneToPounds. Vielleicht können Sie etwas tun:

case 1: 
    Console.WriteLine("Enter an amount in Stone"); 
    double UserInput = double.Parse(Console.ReadLine()); 
    Console.WriteLine("The result is {0}", StoneToPounds(UserInput)); 
    break; 

Sie werden bald genug sehen, dass Sie Code brechen wird, wenn der Benutzer einen Text oder etwas anderes als eine Zahl eingibt; Ich würde vorschlagen, einen Blick in TryParse Methode

0

Die Methoden sind in Ordnung. Sie drucken nur die Antwort nicht. Ändern Sie Ihren Code wie folgt die Antwort drucken:

case 1: 
    Console.WriteLine("Enter an amount in Stone"); 
    double UserInput = double.Parse(Console.ReadLine()); 
    double result = StoneToPounds(UserInput); 
    Console.WriteLine(result.ToString()); 

    break; 
+0

Yup gerade bemerkt, dass Ihre Antwort ist viel besser als wie ich es behoben. Prost! –

0

Sie könnten einfach diese Codezeile hinzufügen, kurz bevor Sie break nennen:

Console.WriteLine("The result is {0}", StoneToPounds(UserInput)); 
Console.WriteLine("Press any key to continue"); 
Console.ReadKey(); 
-1

wie andere gesagt ... Sie Methode aufgerufen wird und Rückkehr der doppelte Wert ... aber Sie speichern es nicht irgendeine Art von Variablen, wenn Sie Ihre Methode auf die Variable selbst operieren wollen, können Sie sie als Ref-Parameter übergeben, so dass jede Änderung mit der Variable innerhalb Ihrer Methode geschieht Auswirkungen auf die Variable global

public static void StoneToPounds(ref double number) 
    { 
     number *= 14 
    } 

btw der betreiber * = könnte ur brauchen für eine separate funktion, wenn ura anfänger dann sollten sie jetzt, dass weniger code ist immer besser, solange du sie sauber und organisiert halten kannst: D

+1

Die Methode gibt den Wert bereits zurück, es gibt keine Notwendigkeit, die Dinge durch Hinzufügen von 'ref' zu erschweren. – juharr

+0

"weniger Code ist immer besser", das stimmt nicht! –

+0

der Zweck der Antwort ist, Wissen zu teilen und ihn aufzuklären, dass C# eine solche Möglichkeit hat, falls er es eines Tages braucht, technisch gibt es keine Notwendigkeit für eine Methode .. aber der Kerl lernt immer noch, wir sollten versuchen, ihm zu helfen solange die Informationen zum gleichen Thema und nicht fortgeschrittene Ebene –

Verwandte Themen