1

C#の宿題の質問:2つの整数の入力を求め、実行する数学演算の入力を求め、結果を返すコンソールアプリケーションを作成しています。ハードコードされた2つのオペランドで動作させることができました。現在、ハードコードされた変数ではなく、ユーザー入力を使用して2つの別々のオブジェクトをインスタンス化しようとしています。私はそれを私が問題を抱えている最低限のコードに分解しました、そして私は問題が同じメソッドから2つのオブジェクトを作成する方法に関係していると思います...しかし私は何がわかりません。

これが私のメインクラスです...

 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キーを押すと、自動的に2番目の整数が取得されます。整数値を出力しようとすると、入力と一致しません。

何が起きてる?MathUIインスタンス化する方法と2つのオペランドに何か問題がありますか?の1つのインスタンスをインスタンス化してからMathUI、その1つのインスタンスで両方の変数を宣言するだけで済みますか?また、整数出力が入力と一致しない理由もわかりません。すべての変数はとしてキャストされるintので、私は最後までやり通す必要がありintますよね?私はこれらを整数としてキャストしようとし(int)op1ました---何らかの内部形式で保持された場合op1に備えて...しかし、そこで何が起こっているのかわかりません。

私は何が欠けていますか?

4

3 に答える 3

3

リードラインはリターンキーによってトリガーされるため、Console.ReadaConsole.ReadLineを作成する必要があります。

public class MathUI
{
    public int EnterInteger()
    {
        Console.Write("Enter an integer: ");
        int enteredInteger = Convert.ToInt32(Console.ReadLine());
        return (enteredInteger);
    }
}
于 2013-03-23T22:08:05.873 に答える
1

Console.ReadLineの代わりに使用してくださいConsole.Read。を使用すると、戻り文字が2番目の呼び出しConsole.Readへの入力として渡されます。Read

Console.Readまた、によって返されるintは数値を解析しておらず、入力されたcharの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メソッドを静的にすることができます。
于 2013-03-23T22:06:31.100 に答える
1

問題は、Console.Read任意のキーが押された後に値を返すメソッドを使用していることです。また、返された結果は、押されたキーのASCII値です。あなたの場合、310進法で序数(ASCII)値が51で、次にENTER値が13であるを​​押しました。MSDNのドキュメントを見るとConsole.Read、整数が返されます。

文字列として入力された値のユーザーを読み取るには、Console.ReadLineメソッドを使用します。

本当にキーごとに読み込む必要がある場合は、を使用Convert.ToCharしてから、ToStringメソッドを使用して、入力されたキーを文字列として取得できます。そのようです:

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

または、次のコードを使用して実際のオペランドを読み取ることができます

int intOperand;
if (!int.TryParse(Console.ReadLine(), out intOperant))
    Console.WriteLine("You pressed non-numeric key");

于 2013-03-23T22:12:07.247 に答える