我需要帮助从单个方法实例化多个对象&类

时间:2013-03-23 22:03:20

标签: c# instantiation

C#HOMEWORK QUESTION:我正在创建一个控制台应用程序,提示输入两个整数,提示要执行哪个数学运算,然后返回结果。我能够使用硬编码的两个操作数来实现它,现在我试图通过用户输入而不是硬编码变量来实例化两个单独的对象。我已将它剥离到我遇到问题的准系统代码,我怀疑这个问题与我从同一方法创建两个对象的方式有关...但我不确定是什么

这是我的主要课程......

 public class MainModule 
 {
    public static void Main(string[] args)
    {
         // get Operands
        Console.WriteLine("You Will Be Entering Two Integers.\n");
         //
        MathUI myOperand1 = new MathUI();
        int op1 = myOperand1.EnterInteger();
         //
        MathUI myOperand2 = new MathUI();
        int op2 = myOperand2.EnterInteger();

        Console.WriteLine("You chose {0} and {1}.", (int)op1, (int)op2);
        Console.ReadLine();
    }
 }

...以及接受输入的MathUI类。

public class MathUI
{
    public int EnterInteger()
    {
        Console.Write("Enter an integer: ");
        int enteredInteger = Console.Read();
        return (enteredInteger);
    }
}

当我执行程序时,我得到一个整数的提示。我输入,例如,3,这是我的输出。

You Will Be Entering Two Integers.

Enter an integer: 3
Enter an integer: You chose 51 and 13.

Math demo completed
Press <enter> to quit

输入第一个整​​数后按Enter键,我自动获得第二个整数;当我尝试输出整数值时,它们与我的输入不匹配。

这里发生了什么?我实例化MathUI和我的两个操作数的方式有问题吗?我是否只需要实例化MathUI的一个实例,然后在该实例下声明两个变量?我也不确定为什么整数输出与我的输入不匹配。所有变量都被转换为int,所以我应该int一直通过,对吧?我尝试将这些作为整数投射 - (int)op1 - 以防op1以某种内部形式举行......但不知道那里发生了什么。

我错过了什么?

3 个答案:

答案 0 :(得分:3)

你需要创建Console.Read一个Console.ReadLine作为readline由返回键触发。

public class MathUI
{
    public int EnterInteger()
    {
        Console.Write("Enter an integer: ");
        int enteredInteger = Convert.ToInt32(Console.ReadLine());
        return (enteredInteger);
    }
}

答案 1 :(得分:1)

使用Console.ReadLine代替Console.Read。使用Console.Read时,返回字符将作为输入传递给第二个Read调用。

另请注意,Console.Read返回的int不是解析数字,而是为您提供输入字符的Unicode字符值。这就是你得到“错误”数字的原因。

您需要使用Console.ReadLine并解析字符串结果,如下所示:

        public class MathUI
        {
            public int EnterInteger()
            {
                Console.Write("Enter an integer: ");
                int enteredInteger = int.Parse(Console.ReadLine());
                return (enteredInteger);
            }
        }

其他一些注意事项供你考虑:

  • 无需在Console.WriteLine调用中强制转换值。
  • 您可以将MathUI类和EnterInteger方法设为静态。

答案 2 :(得分:1)

问题是您使用Console.Read方法,该方法在按下任何键后返回一个值。此外,返回的结果是按下的键的ASCII值。在您的情况下,您按下 3 ,其十进制系统中的序号(ASCII)值为51,然后 ENTER ,其值为13.如果查看MSDN文档,{{ 1}}返回一个整数。

要读取以字符串形式输入的值,请使用Console.ReadLine方法。

如果您确实需要按键读取密钥,则可以使用Convert.ToChar,然后使用Console.Read方法将输入的密钥作为字符串输入。像这样:

ToString

或者您可以使用以下代码来读取实际操作数

string key = Convert.ToChar(Console.ReadLine()).ToString();