总结两步到一步

时间:2015-10-05 22:54:25

标签: c#

在控制台应用程序的一个类中,我编写了一个读取许多整数输入并对它们进行求和的方法。输入调用另一个写入另一个类(Input.ReadIntegerConsole())的方法,该类应该读取输入,然后如果输入是整数则继续操作第一个类,否则写入& #34;无效选择",这样:

private void ReadInputAndSumNumbers()
{
    Console.Write("\nNumber you choose? ");
    int.TryParse(Console.ReadLine(), out numberChosen);
    numberChosen = Input.ReadIntegerConsole();
    sum += numberChosen;

等。问题是这样,当我运行应用程序时,控制台会问:您选择的号码?然后无论我输入什么,程序什么都不做。此时我将输入另一个输入,并且只有现在ReadIntegerConsole方法开始:如果它是一个整数,操作继续,否则程序显示"无效选择"。如何做到这一点,程序一步完成所有事情,而不是两步,所以它读取我的输入,并立即验证它是否是一个整数,并决定继续或显示"无效的选择"?怎么做而不必写两个输入?我确信Input.ReadIntegerConsole代码写得正确,这就是为什么我没有在这里显示它。我尝试在班级的许多不同部分写作numberChosen = Input.ReadIntegerConsole(),但它从未奏效。我也试过写numberChosen=int.Parse(ConsoleReadLine())=Input.ReadIntegerConsole(),但当然它不起作用。

2 个答案:

答案 0 :(得分:1)

Console.Write("\nNumber you choose? ");
int.TryParse(Console.ReadLine(), out numberChosen);
numberChosen = Input.ReadIntegerConsole();
sum += numberChosen;

您没有提供Input.ReadIntegerConsole的实现,但可以猜测它调用Console.ReadLine并将其解析为int(与行相同)它上面)。所以基本上,你的代码正在做:

  1. 打印消息
  2. 等待用户输入,解析为int并存储在numberChosen
  3. 调用可能等待用户输入的Input.ReadIntegerConsole,将其解析为int并将其返回,并将其存储在numberChosen
  4. 将号码添加到sum
  5. 因此,当您输入第一个数字时,它完全符合您的想法,但Input.ReadIntegerConsole要求另一个输入并覆盖原始数字(因此,如果您输入垃圾,则表示& #34;无效值")。从控制台读取的第二个内容解释了为什么程序似乎什么都不做,因为它等待更多输入。

    删除手册Console.ReadLine可以摆脱冗余的读/解析,这就是修复代码的原因。它不是没有Console.ReadLine的情况下工作,它使用的方法隐藏了对它的调用。

答案 1 :(得分:0)

如果你问我认为你在问什么,我想你想要这个:

UITableViewCell

private void ReadInputAndSumNumbers() { Console.Write("\nNumber you choose? "); int numberChosen; if(int.TryParse(Console.ReadLine(), out numberChosen)) { sum += numberChosen; } else { Console.WriteLine("Invalid choice."); } } 是一个带有int.TryParse参数的方法,这意味着解析的结果将分配给numberChosen。它返回out,但是:如果成功则为true(传递的字符串可解析为bool),如果不成功则返回false。所以它的意思是:

如果int.TryParse可以从输入字符串创建一个int,则变量numberChosen会在方法结束时存储结果;将numberChosen加上总和。
否则,它是不成功的,写下"无效的选择"。

输出参数可能会有点混乱,但它们非常强大。但是,如果我的工作很糟糕,那么这里有一些链接:Int32.TryParseout (C# reference)