使用C#中的方法使代码更清晰 [英] Make my code more clean working with methods in C#

查看:84
本文介绍了使用C#中的方法使代码更清晰的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,首先这是我在这里问过的第一个问题,所以对我很轻松。我正在努力学习C#并认为我对举重的热情可以创造一些自动化程序。在这种情况下,自动计算您的5/3/1锻炼。我的问题是我想学习如何使用方法,我想我可以在这里很好地实现它们,问题是我不知道如何解决这个问题。到目前为止这是我的代码:



Hello first of all this is my first question ever asked here, so go easy on me.I am trying to learn C# and thinking that my passion for weightlifting I could create some automated program. In this case, calculate your 5/3/1 workout automatically. My problem is that I would like to learn how to use methods, and I think I can implement them very well here, the problem is I don't know how to attack this problem.Here is my code so far:

namespace _531Calculator
{
    class Program
    {
        static void Main(string[] args)
        {
            //Default
            Console.WindowHeight = 28;
            Console.WindowWidth = 60;
            Console.ForegroundColor = ConsoleColor.White;


            Console.Title ="5/3/1 Calculator";

            Console.WriteLine("----Your max's---- \n");

            //Bench Max
            Console.Write("Your Bench max: ");
            double benchMax = Convert.ToDouble(Console.ReadLine());

            //Bench Week 1
            double deadliftWeekOne_65 = benchMax * 0.65;
            double deadliftWeekOne_75 = benchMax * 0.75;
            double deadliftWeekOne_85 = benchMax * 0.85;

            //Deadlift Max
            Console.Write("Your Deadlift max: ");
            double deadliftMax = Convert.ToDouble(Console.ReadLine());

            //Deadlift Week 1
            double benchWeekOne_65 = deadliftMax * 0.65;
            double benchWeekOne_75 = deadliftMax * 0.75;
            double benchWeekOne_85 = deadliftMax * 0.85;

            //Squats Max
            Console.Write("Your Squat max: ");
            double squatMax = Convert.ToDouble(Console.ReadLine());

            //Squat Week 1
            double squatWeekOne_65 = squatMax * 0.65;
            double squatWeekOne_75 = squatMax * 0.75;
            double squatWeekOne_85 = squatMax * 0.85;

            //OHP Max
            Console.Write("Your OHP max: ");
            double ohpMax = Convert.ToDouble(Console.ReadLine());

            //OHP Week 1
            double ohpWeekOne_65 = ohpMax * 0.65;
            double ohpWeekOne_75 = ohpMax * 0.75;
            double ohpWeekOne_85 = ohpMax * 0.85;

            Console.WriteLine("\n ----Week 1---- \n");

            Console.WriteLine("----DAY 1----");
            Console.WriteLine("A : Bench: 3 x 5 @ " + benchWeekOne_65 + ", " + benchWeekOne_75 + ", " + benchWeekOne_85);
            Console.WriteLine("B : Dumbbell Chest Press @ 5 x 15");
            Console.WriteLine("C : Barbell Row @ 5 x 10 \n");

            Console.WriteLine("----DAY 2----");
            Console.WriteLine("A : Deadlift: 3 x 5 @ " + deadliftWeekOne_65 + ", " + deadliftWeekOne_75 + ", " + deadliftWeekOne_85);
            Console.WriteLine("B : Hamstring Curls @ 5 x 12");
            Console.WriteLine("C : Assited Work 2: Leg Raises(Abs) @ 5 x 15 \n");

            Console.WriteLine("----DAY 3----");
            Console.WriteLine("A : OHP: 3 x 5 @ " + ohpWeekOne_65 + ", " + ohpWeekOne_75 + ", " + ohpWeekOne_85);
            Console.WriteLine("B : Dip @ 5 x 15");
            Console.WriteLine("C : Chin-Up 5 x 12 \n");

            Console.WriteLine("----DAY 4----");
            Console.WriteLine("A : Squat: 3 x 5 @ " + squatWeekOne_65 + ", " + squatWeekOne_75 + ", " + squatWeekOne_85);
            Console.WriteLine("B : Stiffdead Deadlifts: @ 5 x 10 ");
            Console.WriteLine("C : Leg Press: @ 5 x 15 \n");

            Console.ReadLine(); 

        }

    }
}





什么我试过了:



好​​吧,因为我在这里寻求帮助,不知道如何解决这个问题,欢迎任何帮助。



What I have tried:

Well since i am here for help, and not sure how to attack this problem, any help is welcome.

推荐答案

首先,不要使用转换方法:用户一直错误输入输入,转换方法会让你的应用程序崩溃,如果他们这样做。请改用double.TryParse方法。



实际上,这是使用方法的一个很好的介绍。

目前,你做的同样的事情多次:

First off, don't use Convert methods: users mistype the input all the time, and the Convert methods will make you app crash if they do that. Use the double.TryParse methods instead.

In fact, that's a good intro to using a method.
At the moment, you do the same thing a number of times:
            Console.Write("Your Bench max: ");
            double benchMax = Convert.ToDouble(Console.ReadLine());
...
            Console.Write("Your Deadlift max: ");
            double deadliftMax = Convert.ToDouble(Console.ReadLine());
...
            Console.Write("Your Squat max: ");
            double squatMax = Convert.ToDouble(Console.ReadLine());
...
            Console.Write("Your OHP max: ");
            double ohpMax = Convert.ToDouble(Console.ReadLine());

并转换那些使用TryParse会使你的代码相当笨拙。

所以相反,让我们来吧将代码移入方法中。首先编写一个方法 - 它需要返回一个double,并且需要将一个字符串提示作为输入参数。所以它的签名很简单:

And convert those to use TryParse would make your code fairly unwieldy.
So instead, let's move the code in to a method instead. Start by writing a method - it needs to return a double, and it needs to take a string prompt as an input parameter. So it's signature is simple:

double GetDouble(string prompt)

它的内容也不复杂:

1)打印提示。

2)获取用户输入

3)将其转换为双倍

4)如果转换失败,告诉用户有问题然后回到(1)

5)返回值。

所以让我们写一下:

And it's content isn't complicated either:
1) Print the prompt.
2) Get the user input
3) Convert it to a double
4) If the conversion failed, tell the user there is a problem and go back to (1)
5) Return the value.
So let's write it:

double GetDouble(string prompt)
    {
    double result;
    do
        {
        Console.Write(prompt);
        string inp = Console.ReadLine();
        if (double.TryParse(inp, out result))
            {
            return result;
            }
        Console.WriteLine("\"{0}\" is not a valid double value!", inp);
        } while(true);
    }

现在我们要做的就是使用新方法:

All we have to do now is use the new method:

            double benchMax = GetDouble("Your Bench max: ");
...
            double deadliftMax = GetDouble("Your Deadlift max: ");
...
            double squatMax = GetDouble("Your Squat max: ");
...
            double ohpMax = GetDouble("Your OHP max: ");

看看这个代码现在多清洁了多少?



现在查看你的代码,看看你是否能找到其他可以从同样的注意力中受益的东西!

See how much cleaner that bit of code is now?

Now look though your code, and see if you can find anything else which could benefit from the same attention!


嘿,



我不确定在哪里发布我的更新。但这就是我所追求的,我会像一些关于如何让它变得更好的反馈。 - 谢谢。



Hey,

I am unsure of where to post my updates. But this is what i cam up with, i would reayll like some feedback on how to make it better. - Thank you.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _531Calculator
{
    class Program
    {
        static void Main(string[] args)
        {
            //Default
            Console.WindowHeight = 28;
            Console.WindowWidth = 60;
            Console.ForegroundColor = ConsoleColor.White;

            Console.Title = "5/3/1 Calculator";

            Console.WriteLine("----Your max's---- \n");

            double getDouble(string prompt)
            {
                double result;
                do
                {
                    Console.Write(prompt);                          //Calls benchMax..DeadliftMax..etc(in order)
                    string input = Console.ReadLine();              //Writes the string `Your Bench Max:`
                    if (double.TryParse(input, out result))
                    {
                        return result;
                    }
                    else
                    {
                        Console.WriteLine("Not valid", input);
                    }

                } while (true);
            }


            double benchMax = getDouble("Your Bench max: ");
            double deadliftMax = getDouble("Your Deadlift max: ");
            double squatMax = getDouble("Your Squat max: ");
            double ohpMax = getDouble("Your OHP max: ");


            //Bench Week 1
            double deadliftWeekOne_65, deadliftWeekOne_75, deadliftWeekOne_85;
            deadliftWeekOne(deadliftMax, out deadliftWeekOne_65, out deadliftWeekOne_75, out deadliftWeekOne_85);

            //Deadlift Week 1
            double benchWeekOne_65, benchWeekOne_75, benchWeekOne_85;
            benchWeekOne(benchMax, out benchWeekOne_65, out benchWeekOne_75, out benchWeekOne_85);

            //Deadlift Week 1
            double squatWeekOne_65, squatWeekOne_75, squatWeekOne_85;
            squatWeekOne(squatMax, out squatWeekOne_65, out squatWeekOne_75, out squatWeekOne_85);

            //OHP Week 1
            double ohpWeekOne_65, ohpWeekOne_75, ohpWeekOne_85;
            ophWeekOne(ohpMax, out ohpWeekOne_65, out ohpWeekOne_75, out ohpWeekOne_85);

            Console.WriteLine("\n ----Week 1---- \n");

            Console.WriteLine("----DAY 1----");
            Console.WriteLine("A : Bench: 3 x 5 @ " + benchWeekOne_65 + ", " + benchWeekOne_75 + ", " + benchWeekOne_85);
            Console.WriteLine("B : Dumbbell Chest Press @ 5 x 15");
            Console.WriteLine("C : Barbell Row @ 5 x 10 \n");

            Console.WriteLine("----DAY 2----");
            Console.WriteLine("A : Deadlift: 3 x 5 @ " + deadliftWeekOne_65 + ", " + deadliftWeekOne_75 + ", " + deadliftWeekOne_85);
            Console.WriteLine("B : Hamstring Curls @ 5 x 12");
            Console.WriteLine("C : Assited Work 2: Leg Raises(Abs) @ 5 x 15 \n");

            Console.WriteLine("----DAY 3----");
            Console.WriteLine("A : OHP: 3 x 5 @ " + ohpWeekOne_65 + ", " + ohpWeekOne_75 + ", " + ohpWeekOne_85);
            Console.WriteLine("B : Dip @ 5 x 15");
            Console.WriteLine("C : Chin-Up 5 x 12 \n");

            Console.WriteLine("----DAY 4----");
            Console.WriteLine("A : Squat: 3 x 5 @ " + squatWeekOne_65 + ", " + squatWeekOne_75 + ", " + squatWeekOne_85);
            Console.WriteLine("B : Stiffdead Deadlifts: @ 5 x 10 ");
            Console.WriteLine("C : Leg Press: @ 5 x 15 \n");

            Console.ReadLine();

        }

        private static void ophWeekOne(double ohpMax, out double ohpWeekOne_65, out double ohpWeekOne_75, out double ohpWeekOne_85)
        {
            ohpWeekOne_65 = ohpMax * 0.65;
            ohpWeekOne_75 = ohpMax * 0.75;
            ohpWeekOne_85 = ohpMax * 0.85;
        }

        private static void squatWeekOne(double squatMax, out double squatWeekOne_65, out double squatWeekOne_75, out double squatWeekOne_85)
        {
            squatWeekOne_65 = squatMax * 0.65;
            squatWeekOne_75 = squatMax * 0.75;
            squatWeekOne_85 = squatMax * 0.85;
        }

        private static void benchWeekOne(double benchMax, out double benchWeekOne_65, out double benchWeekOne_75, out double benchWeekOne_85)
        {
            benchWeekOne_65 = benchMax * 0.65;
            benchWeekOne_75 = benchMax * 0.75;
            benchWeekOne_85 = benchMax * 0.85;
        }

        private static void deadliftWeekOne(double deadliftMax, out double deadliftWeekOne_65, out double deadliftWeekOne_75, out double deadliftWeekOne_85)
        {
            deadliftWeekOne_65 = deadliftMax * 0.65;
            deadliftWeekOne_75 = deadliftMax * 0.75;
            deadliftWeekOne_85 = deadliftMax * 0.85;
        }
    }
}


这篇关于使用C#中的方法使代码更清晰的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆