C# 为int变量的输入创建整数范围

C# 为int变量的输入创建整数范围,c#,list,validation,variable-assignment,restrict,C#,List,Validation,Variable Assignment,Restrict,所以我有一个项目,我需要存储8个整数,介于1-10之间,然后将它们调用到直方图中 直方图仅由字符*组成。(请原谅格式错误,这是我的第一篇帖子) 该程序可以运行,但我认为我的int限制(1-10)的if语句可以简化。 我的目标是用尽可能少的代码实现这个输出 整个代码,只有代码(和注释) Console.WriteLine(“您好,欢迎!\n输入8个介于1和10之间的值\n*按任意键继续*”; Console.ReadKey(); //创建用于存储值的列表 列表值=新列表(); //循环以收集值 对

所以我有一个项目,我需要存储8个整数,介于1-10之间,然后将它们调用到直方图中 直方图仅由字符*组成。(请原谅格式错误,这是我的第一篇帖子) 该程序可以运行,但我认为我的int限制(1-10)的if语句可以简化。 我的目标是用尽可能少的代码实现这个输出

整个代码,只有代码(和注释)

Console.WriteLine(“您好,欢迎!\n输入8个介于1和10之间的值\n*按任意键继续*”;
Console.ReadKey();
//创建用于存储值的列表
列表值=新列表();
//循环以收集值
对于(int i=1;i<9;i++)
{
//数据验证起点的标签
重试:
Console.WriteLine(“请输入值”+i,“介于1-10之间”);
//分配给用户输入的变量
value=Console.ReadLine();
//将字符串转换为整数
如果(!int.TryParse(值,out validValue))
{ 
Console.WriteLine(“~error Data Input~”);转到重试;};
if(validValue<1){Console.WriteLine(“~error Data Input~”);转到重试;};
如果(validValue>10){Console.WriteLine(“~error Data Input~”);转到重试;};
值。添加(有效值);
}
对于(int i=0;i<8;i++)
{
Console.WriteLine();
对于(int id=0;id
这是我认为更干净的地方

if (validValue < 1) { Console.WriteLine("~Incorrect Data Input~"); goto retry; };
                if (validValue > 10) { Console.WriteLine("~Incorrect Data Input~"); goto retry; };

if(validValue<1){Console.WriteLine(“~error Data Input~”);转到重试;};
如果(validValue>10){Console.WriteLine(“~error Data Input~”);转到重试;};
我愿意接受任何关于如何清理这个项目或项目任何部分的建议

这个项目有一个更困难的方面,比如如果你想炫耀什么的话就这么做,我需要垂直显示柱状图。 我想这可以用2d阵列来完成吗?除了需要80个空格和*在正确的空格中之外,我真的没有任何线索

我只写了一个月左右的代码,它是以学习者为基础的,欢迎任何帮助或建议

多谢各位


Chris

下面是一个示例,演示如何用几个指针重建逻辑

Console.WriteLine("Hello and Welcome!\nEnter 8 values between 1 and 10\n*Press Any Key to continue*");
Console.ReadKey();

//create list to store values
List<int> values = new List<int>();

//loop to collect values (no need to run from 1 - 9; 0 - 8 works fine.)
for (int i = 0; i < 8; i++)
{
    //label for data validation start point
    int validValue = 0;

    //Use a while loop instead of a goto
    while (validValue == 0)
    {
        Console.WriteLine("Please Enter Value " + i, "Between 1 - 10");
        //variable assigned to user input
        var value = Console.ReadLine();

        //Convert string to integer
        //If the first question in the predicate fails, it won't go on to ask the other questions
        if (int.TryParse(value, out validValue) && validValue > 0 && validValue < 10)
        {
            values.Add(validValue);
        }
        else
        {
            Console.WriteLine("~Incorrect Data Input~");
        }
        //If the code reaches this point and validValue hasn't been changed, it'll be 0 and the loop will run again
    }
}

for (int i = 0; i < 8; i++)
{
    Console.WriteLine();
    for (int id = 0; id < values[i]; id++)

        Console.Write("*");
}

Console.ReadKey();
Console.WriteLine(“您好,欢迎!\n输入8个介于1和10之间的值\n*按任意键继续*”;
Console.ReadKey();
//创建用于存储值的列表
列表值=新列表();
//循环以收集值(无需从1-9运行;0-8工作正常。)
对于(int i=0;i<8;i++)
{
//数据验证起点的标签
int validValue=0;
//使用while循环而不是goto
while(有效值==0)
{
Console.WriteLine(“请输入值”+i,“介于1-10之间”);
//分配给用户输入的变量
var value=Console.ReadLine();
//将字符串转换为整数
//如果谓词中的第一个问题失败,它将不会继续问其他问题
if(int.TryParse(值,out validValue)&&validValue>0&&validValue<10)
{
值。添加(有效值);
}
其他的
{
Console.WriteLine(“~数据输入不正确~”);
}
//如果代码到达这一点并且validValue没有更改,它将为0,循环将再次运行
}
}
对于(int i=0;i<8;i++)
{
Console.WriteLine();
对于(int id=0;id
到目前为止,您的工作做得很好。继续以一种你能找到答案的方式提问。一些建议。。。如果可能,请不要使用
goto
。尝试定义一个变量
int validValue=0
然后使用
while
循环保持循环返回,直到用户定义它
while(validValue==0){//请用户定义它}
。为什么?没有后路??谢谢你用词搜索像是的,内特,谢谢你,伙计。这就是我想要的。那么,为什么要使用while循环而不是for?这个循环在第一个writeline输出时循环就我所能理解的程序的目的而言,它的作用与您发布的完全相同,只是将
goto
替换为
while
循环。为了澄清您提出的第一个问题,这里有两种循环。
for
循环正在处理您试图收集的8个值的递增,并且在该循环的每个迭代中,
while
循环确保每个过程收集可用的、解析的、有效的数据。在每个
for
循环中,
while
将根据需要循环多次,直到用户输入有效数据。是的,我对此处使用的循环有基本了解。我尝试了你提供的代码,程序不会因用户输入而停止。它不断地请求一个值。我不明白它为什么会这样做,它不等待用户输入是没有意义的
Console.WriteLine("Hello and Welcome!\nEnter 8 values between 1 and 10\n*Press Any Key to continue*");
Console.ReadKey();

//create list to store values
List<int> values = new List<int>();

//loop to collect values (no need to run from 1 - 9; 0 - 8 works fine.)
for (int i = 0; i < 8; i++)
{
    //label for data validation start point
    int validValue = 0;

    //Use a while loop instead of a goto
    while (validValue == 0)
    {
        Console.WriteLine("Please Enter Value " + i, "Between 1 - 10");
        //variable assigned to user input
        var value = Console.ReadLine();

        //Convert string to integer
        //If the first question in the predicate fails, it won't go on to ask the other questions
        if (int.TryParse(value, out validValue) && validValue > 0 && validValue < 10)
        {
            values.Add(validValue);
        }
        else
        {
            Console.WriteLine("~Incorrect Data Input~");
        }
        //If the code reaches this point and validValue hasn't been changed, it'll be 0 and the loop will run again
    }
}

for (int i = 0; i < 8; i++)
{
    Console.WriteLine();
    for (int id = 0; id < values[i]; id++)

        Console.Write("*");
}

Console.ReadKey();