问题是我必须制作一个控制台应用程序,在其中输入一个数字并写出符号“|” 我插入了多少。例如,如果我插入数字 6,它会写出 ||||||。它一直在询问,直到我插入 0 并关闭。到目前为止,输入是这样的:
int input;
Console.Write("\n\n Insert an number ---> ");
input = Convert.ToInt32(Console.ReadLine());
我尝试过使用 char 数组,但没有用。
循环是如此 2012 :)
using System;
using System.Linq;
internal class Program
{
private static void Main(string[] args)
{
Enumerable.Range(0, Int32.MaxValue)
.Select(i => Int32.TryParse(Console.ReadLine(), out i) ? i : -1)
.Where(i => i >= 0)
.TakeWhile(i => i > 0)
.Select(i => {
Console.WriteLine(String.Join("", Enumerable.Repeat("|", i)));
return 0;})
.Count();
}
}
描述(即使答案很不严肃):
Enumerable.Range
是允许半无限(正如 Chris Sinclair 指出的那样,它只有 2,147,483,647 次)可以在单个语句中枚举大部分代码。Select
逐行读取输入并将有效输入转换为整数,其余为 -1(请注意,在此示例中,-1 是“无效输入”的可能值,通常会返回Tuple<int, bool>
或int?
表示无效值Where
过滤掉“无效”输入(正确输入的负数以及之前报告为 -1 的所有非数字Select
)。TakeWhile
为 0 提供终止条件。Select
打印结果。请注意,要从同一字符的多个副本构造字符串,应该使用正确的new String("|", count)
构造函数,但它不那么有趣。Count
强制立即迭代查询。伪代码
is read line a number
until read line is 0
for 1 to the number
print |
is read line a number
if not a number go back at asking the number saying it is not a number
if not a number go back at asking the number saying it is not a number
现在有乐趣做你的作业
两个你应该知道的基本概念
for循环:
for(int i=0; i<input; i++)
{
// do stuff
}
这是做某事input
次数的常见模式,因此如果input
等于6
,则它将执行//do stuff
6 次。
控制台.Write
Console.Write('|');
Console.Write
将文本写入控制台而不在末尾添加新行。
我相信您可以以某种方式组合其中一些语言功能来满足您的要求。