控制台始终写相同的数字

时间:2017-07-30 21:17:34

标签: c# .net

我不知道什么是错的,但我一直在控制台得到相同的结果:

111
118
101
114
     

我解决了这个问题,但现在我的控制台没有向我显示任何内容。   我更新了我的代码!

这是我的练习:  编写程序并要求用户连续输入数字或输入“退出”退出。数字列表可能包括重复。显示用户输入的唯一编号。

这是我的代码:

    while (true)
    {
        var numbers = new List<int>();
        Console.WriteLine("write a number or type quit if you want to exit, if you want to finish write over: ");
        var input = Console.ReadLine();

        if (input.ToLower() == "quit")
        {
            break;
        }
        if (input.ToLower() == "over")
        {
            var uniq = new List<int>();
            foreach (var other in numbers)
            {
                Convert.ToInt32(other);
                if (!uniq.Contains(other))
                {
                    uniq.Add(other);
                    Convert.ToInt32(other);
                    Console.WriteLine(other);

                    continue;
                }
                int cifre;
                if (int.TryParse(input, out cifre))
                {
                    numbers.Add(cifre);
                }
                else
                {
                    Console.WriteLine("Invalid input, type 'quit', 'over' or a numeric value");
                }

            }
        }

    }

感谢您的帮助。

我想通了,我只需复制这一行:

  

var numbers = new List();   到了while循环的顶部并且实际上使用了与bignning相同的所有内容(因为循环列表本身没有数字)。我将编辑我的代码,以便您可以获救。

希望它有助于某人

    var numbers = new List<int>();


 while (true)
        {
            Console.WriteLine("enter a number or quit or over");
            var input = Console.ReadLine();

            if (input == "quit")
            {
                break;
            }

            if (input == "over")
            {
                var uniq = new List<int>();

                foreach (var value in numbers)
                {

                    if (!uniq.Contains(value)) {
                        uniq.Add(value);
                    }
                }
                foreach (var numbr in uniq) {
                    Console.WriteLine(numbr);

                }
            }
            else { 
                // inpout dodas v numbers
                var conv = Convert.ToInt32(input);
                numbers.Add(conv);
            }
        }


            }
}

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

        var numbers = new List<int>();
        
        Console.WriteLine("Enter numbers or Quit");
        while (true)
        {
            var value = Console.ReadLine();
            if (value == "Quit")
            {
                break;
            }
            else
            {
                if (!numbers.Contains(Convert.ToInt32(value)))
                numbers.Add(Convert.ToInt32(value));
            }
        }

        foreach (var number in numbers)
        {
            Console.WriteLine(number);
        }

答案 1 :(得分:0)

在检查用户是否输入“over”之前,您已经转换了输入数据中的字符并将其添加到列表中。换句话说,您要将'o''v''e''r'的ASCII字符值添加到数字列表中。

移动“结束”检查并确保它们不会添加到列表中:

while (true)
{
    ...input stuff
    if (input.ToLower() == "quit")
    {
        break;
    }

    if (input.ToLower() == "over")
    {
        ...make unique and report
        continue;
    }

    foreach (var number in input)
    {
        var cifre = Convert.ToInt32(number);
        numbers.Add(cifre);
    }
}

这将解决您在列表中包含这些相同数字的问题。您可能还想将foreach替换为:

int cifre;
if (int.TryParse(input, out cifre))
{
    numbers.Add(cifre);
}
else
{
    Console.WriteLine("Invalid input, type 'quit', 'over' or a numeric value");
}

假设您每次都要输入一个数值。

答案 2 :(得分:0)

看起来代码的逻辑存在一些问题。这是我提出的帮助你的伪代码:

While (true) 
    if (quit) 
       //end program
    if (over) 
       //print out the list of integers
    else 
       if (input is not a number)
           continue
       if (number is not in list)
           //add to list
       else 
           //do nothing

这可以帮助您重写程序。