如何将此代码移动到类/方法?

时间:2016-04-29 14:28:26

标签: c# class generics methods

我正在编写C#编程的Web课程。我想对蝙蝠说对,我不希望你们为我做我的工作。现在我的具体/一般问题。我习惯于编写顺序代码。当我尝试将我的工作代码移动到类/方法时,我会深入研究。

下面的代码示例是针对猜谜游戏1-100。我已经尝试了四个小时直接将代码分解为一个单独的类。我设法将用户输入或RND输入到类中。然后主要的逻辑崩溃了。如果RND块是静态但用户输入不是静态等等,似乎我得到了最好的结果。最后,我回过头来讨论Main中的所有内容,然后转向你寻找通用指南。

我需要知道这一点,所以我每次都可以清理我的主人。从正在运行的Class Program Ignore Screen开始。

<--------Code Below
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Uppgift3GissaTalet
{

    static class Screen
    {
        // Screen - Tools that I use every time ignore until end of screen======================================= >

        // Methods for screen handling:
        //
        // Clear Screen  ------------------------------------------
        static public void cls()
        {
            Console.Clear();
        }

        // Set Curser Posittion  ----------------------------------
        static public void cup(int column, int rad)
        {
            Console.SetCursorPosition(column, rad);
        }

        // Key Input --------------------------------------------
        static public ConsoleKeyInfo inKey()
        {
            ConsoleKeyInfo in_key; in_key = Console.ReadKey(); return in_key;
        }

        // String Input -----------------------------------------
        static public string inStr()
        {
            string in_string; in_string = Console.ReadLine(); return in_string;
        }

        // Int Input -------------------------------------------
        static public int inInt()
        {
            int int_in; try { int_in = Int32.Parse(Console.ReadLine()); }
            catch (FormatException) { Console.WriteLine("Input Error \b"); int_in = 0; }
            catch (OverflowException) { Console.WriteLine("Input Owerflow\b"); int_in = 0; }
            return int_in;
        }

        // Float Input -------------------------------------------
        static public float inFloat()
        {
            float float_in; try { float_in = Convert.ToSingle(Console.ReadLine()); }
            catch (FormatException) { Console.WriteLine("Input Error \b"); float_in = 0; }
            catch (OverflowException) { Console.WriteLine("Input Owerflow\b"); float_in = 0; }
            return float_in;
        }

        // Meny ------------------------------------------------
        static public int meny(string rubrik, string m_val1, string m_val2)
        {  // Meny med 2 val ---------------------
            int menSvar; menyRubrik(rubrik); menyRad(m_val1); menyRad(m_val2); menSvar = menyInm();
            return menSvar;
        }

        static public int meny(string rubrik, string m_val1, string m_val2, string m_val3)
        {  // Meny med 3 val ---------------------
            int menSvar; menyRubrik(rubrik); menyRad(m_val1); menyRad(m_val2); menyRad(m_val3); menSvar = menyInm();
            return menSvar;
        }

        static public int meny(string rubrik, string m_val1, string m_val2, string m_val3, string m_val4)
        {  // Meny med 4 val ---------------------
            int menSvar; menyRubrik(rubrik); menyRad(m_val1); menyRad(m_val2); menyRad(m_val3); menyRad(m_val4); menSvar = menyInm();
            return menSvar;
        }

        static public int meny(string rubrik, string m_val1, string m_val2, string m_val3, string m_val4, string m_val5)
        {  // Meny med 5 val ---------------------
            int menSvar; menyRubrik(rubrik); menyRad(m_val1); menyRad(m_val2); menyRad(m_val3); menyRad(m_val4); menyRad(m_val5); menSvar = menyInm();
            return menSvar;
        }

        static public int meny(string rubrik, string m_val1, string m_val2, string m_val3, string m_val4, string m_val5, string m_val6)
        {  // Meny med 6 val ---------------------
            int menSvar; menyRubrik(rubrik); menyRad(m_val1); menyRad(m_val2); menyRad(m_val3); menyRad(m_val4); menyRad(m_val5); ; menyRad(m_val6); menSvar = menyInm();
            return menSvar;
        }

        static void menyRubrik(string rubrik)
        {   // Meny rubrik --------
            cls(); Console.WriteLine("\n\t {0}\n----------------------------------------------------\n", rubrik);
        }

        static void menyRad(string menyVal)
        {   // Meny rad    --------
            Console.WriteLine("\t {0}", menyVal);
        }

        static int menyInm()
        { // Meny inmating ------
            int mVal; Console.Write("\n\t Menyval : "); mVal = inInt(); return mVal;
        }

        // Screen - End  <========================================
    } // screen <----

    class Program
    {
        static void Main(string[] args)
        {//Foreign bla bla.

            string rubrik = "\tGissa ett tal mellan 1 och 100: ";
            Random rnd = new Random();
            int slumpTal = rnd.Next(1, 101);
            int svar;
            int count = 0;

            Screen.cls();
            //Console.Write("\t\t" + slumpTal);     //Used for fixing logic.
            Console.WriteLine("\n\t {0}\n\t----------------------------------------------\n", rubrik);
            Console.Write("\tSkriv ditt tal: ");
            svar = Screen.inInt();
            count++;

            //Foreign yadda yadda.
            do
            {
                if (svar < 1 || svar > 100)  //Påminn användaren om att hålla sig inom ramarna.
                {
                    System.Console.Write("\tTalet du söker är inom intervallet 1-100!", svar);
                    Console.Write("\n\tSkriv ditt tal: ");
                    svar = Screen.inInt();
                }

                else if (slumpTal > svar && (slumpTal - svar < 6))  //Getting hotter.
                {
                    System.Console.Write("\tTalet du söker är större än {0} men du är nära nu!", svar);
                    Console.Write("\n\tSkriv ditt tal: ");
                    svar = Screen.inInt();
                    count++;
                }

                else if (slumpTal > svar)  //Ge ledtråd om att användaren måste skriva ett större tal.
                {
                    System.Console.Write("\tTalet du söker är större än {0}.", svar);
                    Console.Write("\n\tSkriv ditt tal: ");
                    svar = Screen.inInt();
                    count++;
                }

                else if (slumpTal < svar && (svar - slumpTal < 6))  //Getting hotter.
                {
                    System.Console.Write("\tTalet du söker är mindre än {0} men du är nära nu!", svar);
                    Console.Write("\n\tSkriv ditt tal: ");
                    svar = Screen.inInt();
                    count++;
                }

                else if (slumpTal < svar)  //Ge ledtråd om att användaren måste skriva ett lägre tal.
                {
                    System.Console.Write("\tTalet du söker är mindre än {0}.", svar);
                    Console.Write("\n\tSkriv ditt tal: ");
                    svar = Screen.inInt();
                    count++;
                }

            } while (svar != slumpTal);

            Screen.cls();
            Console.ForegroundColor = ConsoleColor.Green; //Changing colour(sic!) at win.
            Console.Write("\n\n\t\tBra jobbat, du löste problemet. Rätt svar är {0}!\n\t\tDu tog {1} försök på dig.", slumpTal, count);
            Screen.inKey();

        }//<------------Main
    }//<===========Program
}

1 个答案:

答案 0 :(得分:0)

我只是试图将其分解一下。在不使用英文命名的情况下解释您正在创建的内容更加困难,但原则是相同的。

在您已创建的课程的主要内容中创建对象。

class Program
{
    static void Main(string[] args)
    {
        string rubrik; 
        string m_val1; 
        string m_val2;

        Utilities utility = new Utilities();
        string str = Console.ReadLine();
        int myint = utility.inInt(str);

        MyClass myclass = new MyClass();

        // or           
        // getting these values before doing so
        MyClass class = new MyClass(rubrik, m_val1, m_val2); 

        myclass.Method(myint); // etc

将传入的变量可用于类方法 或者可能成为该类实例化的初始化者。

public class MyClass
{

    // class members
    // eg ???
    public string Rubrik {get; set;}

    // constructors

    public MyClass(){}

    public MyClass(string rubrik, string m_val1, string m_val2)
    {
        Rubrik = rubrik;
        // and so on.

    }


    // TODO .. add these menyRad(m_val1);
    //  menyRad(m_val2); menyRad(m_val3);
    // menyRad(m_val4); menSvar = menyInm();

    public int meny(string rubrik, string m_val1, string m_val2)
    {  
        int menSvar; 
        // Use class members to do some calculation and return the value

        return menSvar;
    }
    // etc



}

为任何管家保留方法创建单独的Utilities类。

public class Utilities
{
    // Int Input -------------------------------------------
    public int inInt(string input)
    {
        int int_in; 
        try 
        { 
            int_in = Int32.Parse(intput); 
        }
        catch (FormatException) 
        { 
            Console.WriteLine("Input Error \b"); 
            int_in = 0; 
        }
        catch (OverflowException) 
        { 
            Console.WriteLine("Input Owerflow\b"); 
            int_in = 0; 
        }
        return int_in;
    }

    // Float Input -------------------------------------------
    public float inFloat(string input)
    {
        ... etc
    }

}