【问题标题】:How to move this code to class/method?如何将此代码移动到类/方法?
【发布时间】:2016-04-29 14:28:26
【问题描述】:

我正在做一个 C# 编程的网络课程。我想说的是,我不想让你们为我做我的工作。现在到我的具体/一般问题。我习惯于编写顺序代码。当我尝试将我的工作代码移动到我深入渡渡鸟的类/方法时。

下面的代码示例适用于猜谜游戏 1-100。我已经连续尝试了四个小时,将代码分解到一个单独的类中。我设法让用户输入或 RND 进入一个类。然后 main 中的逻辑崩溃了。如果 RND 块是静态的,但用户输入不是静态的等等,似乎我会得到最好的结果。最后我回到了 Main 中的所有内容,然后向你寻求通用指南。

我需要记住这个,这样我才能每次都清理我的 Main。从正在工作的类程序忽略屏幕开始。

<--------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
}

【问题讨论】:

  • 我的第一篇文章,所以我犯规了。我会通读它并表现得更好。过失。
  • 那么真正的问题是什么?
  • 抱歉不清楚。 main 中的代码正在运行,但我想尽可能多地分解为一个新类。如果我将随机函数分开,逻辑就会崩溃。如果我打破用户输入,其他东西就会崩溃。是否应该将所有代码作为一个整体移动?
  • 你有导师吗?这就是他们的目的——问。对于 SO 问题太宽泛(您是否希望有人接受您的代码并完全修复它,或者您期望什么作为答案?),除非您指出您遇到问题的特定地方。
  • 伊薇特:好的。我确实像我一样从 VS Express 复制粘贴。

标签: c# class generics methods


【解决方案1】:

我只是试图打破它。如果不使用英文命名,则很难解释您正在创建的内容,但是原理是相同的。

在您的主目录中创建您已创建的类的对象。

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
    }

}

【讨论】:

  • 非常感谢!现在我对如何开始工作有了一些了解。关键是我这样做了,我只需要一个指针。周末得救了。 ;D
猜你喜欢
  • 2021-08-28
  • 2019-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多