如何在C#中的int [5]数组中捕获五个连续数字?

时间:2015-10-08 18:57:44

标签: c# arrays

我编写了这个小程序,它捕获了在控制台上连续输入的五个整数。 这符合预期 - 除了一件事
我没有找到接受0作为输入数字之一的方法 当然,另一种收集类型的解决方案很容易 但这里的挑战是用五个整数数组来做 我试图设置一个布尔标志" zeroEntered",尝试用计数器,试图计算j backwwards。一切都行不通 也许这是不可能的?有人肯定会知道吗? 这是代码:

class Program
{
    static void Main(string[] args)
    {
    #region Catch5IntegerInArrayOfInt[5]
        // I try to catch five integers in an array of int[5] 
        // This works as expected except I cannot catch 0 as one of the numbers
        // Cannot wrap my head around this one it seems
        // because all ints are initialized with 0
        Console.WriteLine("Please enter five unique numbers consecutively.");
        int[] fiveNumbers = new int[5];          // do it using an array just the same (as collections were not part of the lectures so far)

        for (int i = 0; i < fiveNumbers.Length; i++)
        {
            Console.WriteLine("Please enter your {0} number:", (Countables)i);
            CatchUsersNumbers(fiveNumbers, i);
        }

        DisplayResult(fiveNumbers);
        Console.WriteLine("\n");
    }
    #endregion

    #region HelperMethods
    private static bool CheckWhetherInteger(string userInput)
    {
        bool result = Int32.TryParse(userInput, out myInteger);
        if (result == false)
        {
            Console.Clear();
            Console.WriteLine("You did not enter an integer.");
        }
        return result;
    }

    private static bool CheckUniqueness(int[] fiveNumbers, int userInput)
    {
        for (int i = 0; i < fiveNumbers.Length; i++)
        {
            if (userInput == 0)
            {
                for (int j = i ; j <fiveNumbers.Length; j--)
                {
                    if (j == 0)
                        break;
                    if (fiveNumbers[j] == 0)
                    {
                        return false;
                    }
                }
             }
            else if (fiveNumbers[i] == userInput)
            {
               return false;
            }
        }
        return true;
    }

    private static void CatchUsersNumbers(int[] fiveNumbers, int i)
    {
        while (true)
        {
            userInput = Console.ReadLine().Trim();
            if (CheckWhetherInteger(userInput) && CheckUniqueness(fiveNumbers, myInteger))
            {
                fiveNumbers[i] = myInteger;
                break;
            }
            else
                Console.Clear();
            Console.WriteLine("You did not enter a unique integer number, try again...");
        }
    }

    private static void DisplayResult(int[] fiveNumbers)
    {
        Console.Clear();
        Array.Sort(fiveNumbers);
        Console.WriteLine("These are the five interger numbers you entered \nand that were stored in the array:\n");
        for (int i = 0; i < fiveNumbers.Length; i++)
        {
            if (i != fiveNumbers.Length - 1)
                Console.Write(fiveNumbers[i] + ", ");
            else
                Console.Write(fiveNumbers[i]);
        }
    }
    #endregion

    #region Class Variables
    private static int myInteger = 0;

    private static string userInput;

    private enum Countables
    {
        first = 0,
        second,
        third,
        fourth,
        fifth
    }
    #endregion
}

谢谢。

3 个答案:

答案 0 :(得分:1)

有可能,但是你的5个整数数组将被初始化为5个零,所以当扫描唯一性时,你的检查会失败,特别是因为这段代码:

if (fiveNumbers[j] == 0)
{
  return false;
}

因此,您应该保留一个计数器来跟踪数组中已有的项目数,而不是遍历整个数组。然后,在执行检查时,只检查该索引,并且不包括检查中的其他项,因为它们包含0,但您应该将它们视为未初始化。

您也可以使用其他数据类型解决此问题。例如,您可以创建一个可以为空的整数数组,这样您就可以实际检查某个项是否已经有值。或者(也许是最好的解决方案)你可以使用List而不是数组。

答案 1 :(得分:0)

你唯一的错误是int.TryParse()将0视为无效你可以创建另一个if语句来处理异常,但这看起来不太干净

 private static bool CheckWhetherInteger(string userInput)
{
    if (userInput == "0")
    {
       myInteger = 0;
       return true 
    }
    else
    {
        bool result = Int32.TryParse(userInput, out myInteger);
        if (result == false)
            {
            Console.Clear();
            Console.WriteLine("You did not enter an integer.");
        }
    }
    return result;
}

答案 2 :(得分:0)

我发布解决方案 - 使用可空整数 - 正如Golez Trol所建议的那样。在这里,如果有人有兴趣:

autocapitalize="off"

感谢您的提示 - 我真的被卡住了。