在控制台应用程序的一个类中,我编写了一个读取许多整数输入并对它们进行求和的方法。输入调用另一个写入另一个类(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()
,但当然它不起作用。
答案 0 :(得分:1)
Console.Write("\nNumber you choose? ");
int.TryParse(Console.ReadLine(), out numberChosen);
numberChosen = Input.ReadIntegerConsole();
sum += numberChosen;
您没有提供Input.ReadIntegerConsole
的实现,但可以猜测它也调用Console.ReadLine
并将其解析为int(与行相同)它上面)。所以基本上,你的代码正在做:
int
并存储在numberChosen
Input.ReadIntegerConsole
,将其解析为int
并将其返回,并将其存储在numberChosen
sum
因此,当您输入第一个数字时,它完全符合您的想法,但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.TryParse,out (C# reference)