从用户那里获取价值

Getting Values from User

你好,我在获取系统生成的变量的值时遇到问题。这是从用户获取值的代码;

public void DetailsRate()
{
 begin1:
        Console.WriteLine("\n \t Rate the Acting on a scale of 0 to 5");
        RateActing = int.Parse(Console.ReadLine());
        switch (RateActing)
        {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                Console.WriteLine("\n you have rated the action of the movie {0}", RateActing);
                break;
            default:
                Console.WriteLine("you have selected the wrong choice {0}", RateActing);
                goto begin1;
        }

        begin2:
        Console.WriteLine("\n \t Rate the music of the movie on a scale of 0 to 5");
        RateMusic = int.Parse(Console.ReadLine());
        switch (RateMusic)
        {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                Console.WriteLine("you have rated the music of the movie {0}", RateMusic);
                break;
            default:
                Console.WriteLine("you have selected the wrong choice {0}", RateMusic);
                goto begin2;
        }
}

我将输入的值调用到这段代码中

public double getoverallRate(double rateact, double ratemus)
    {
        double totrate = 0;

         rateact = RateActing * 0.25;
         ratemus = RateMusic * 0.15;


        totrate = (rateact + ratemus);
        return totrate;
    }

这是主要方法

static void Main(string[] args)
    {

        MovieRating MR = new MovieRating();
        MR.DetailsRate();

        MovieRating MT = new MovieRating();
        double totrate = MT.getoverallRate(1, 2);
        Console.WriteLine("total rate is {0}", totrate);

        Console.ReadKey();
    }

拜托,我错过了 totrate 的值,只是给我 0。请帮助我。

首先去掉 goto 语句。快速浏览一下,您可以这样写:

    static void Main(string[] args)
    {
        double RateActing = -1;
        double RateMusic = -1;

        RateActing = GetMovieRating(RateActing);

        RateMusic = GetMovieMusicRating(RateMusic);

        double totrate = getoverallRate(RateActing, RateMusic);

        Console.WriteLine("total rate is {0}", totrate);

        Console.ReadKey();
    }

    private static double GetMovieRating(double RateActing)
    {
        do
        {
            Console.WriteLine("\n \t Rate the Acting on a scale of 0 to 5");
            double.TryParse(Console.ReadLine(), out RateActing);
        }
        while (RateActing < 0 || RateActing > 5);
        Console.WriteLine("\n you have rated the action of the movie {0}", RateActing);
        return RateActing;
    }

    private static double GetMovieMusicRating(double RateMusic)
    {
        do
        {
            Console.WriteLine("\n \t Rate the music of the movie on a scale of 0 to 5");
            double.TryParse(Console.ReadLine(), out RateMusic);
        }
        while (RateMusic < 0 || RateMusic > 5);
        Console.WriteLine("\n you have rated the music of the movie {0}", RateMusic);
        return RateMusic;
    }

    public static double getoverallRate(double rateact, double ratemus)
    {
        rateact *= 0.25;
        ratemus *= 0.15;

        return rateact + ratemus;
    }

这里有很多问题 - 几乎足以重新开始!

首先:切勿使用 goto - 有更好的方法来构建您的程序流程。

其次:您的方法 getoverallRate 使用的参数 (2) 比您传入的参数 (5) 少,所以这甚至不应该构建。

第三:您在 getoverallRate 中引用了三个额外的变量,它们看起来应该是局部变量,但它们没有在任何地方定义。这些是否应该像 Main.

中暗示的用法那样传递?

第四:您在变量 rateactratemus 中传递值,但您会立即用计算覆盖它们。

第五:如果您将用户的输入值与您需要的任何其他值一起传递给此方法,对我来说会更有意义。您不应在任何计算值和 returns 结果的方法中使用来自用户输入的全局变量。您应该始终传入计算所需的任何内容。

六:MR声明的意义何在,DetailsRate有什么作用?