c#仅使用插槽0输入

时间:2018-03-01 22:25:23

标签: c# arrays

我正在尝试让用户在数组中输入1个值,然后退出到主菜单,然后下一个输入值的人将其放入下一个括号,而不是替换插槽0,目前它只是循环第一个数组括号并替换数字。非常感谢帮助

static void Main(string[] args)
{
    int[] myArray = new int[10];

    while (true)
    {
        int enteredNumber;

        Startmenu();
        enteredNumber = Convert.ToInt32(Console.ReadLine());

        if (enteredNumber == 1)
        {                    
            for (int i = 0; i < myArray.Length; i++)
            {
                Console.WriteLine("Insert Number:");
                myArray[i] = Convert.ToInt32(Console.ReadLine());
            }
            Console.Clear();
            Console.WriteLine("blabla");
            Thread.Sleep(2000);
            Console.Clear();
        }

        if (enteredNumber == 9)
        {
            if (Login(1234, 3) == true)
            {
                foreach (int number in myArray)
                {
                    Console.WriteLine(number);
                }
            }
        }
    } 
}

1 个答案:

答案 0 :(得分:0)

我认为您在该代码中遇到的一个问题是您尝试在一种方法中做太多。您可能希望将谨慎的操作分解为单独的方法,这既可以实现代码重用,也可以使代码更具可读性。

首先,您需要一个从用户那里获得int的方法。让我们编写一个帮助方法来执行该操作,该方法将string作为对用户的提示显示,并且将继续提示他们,直到他们输入有效的int 。我们可以使用int.TryParse来确定他们是否输入了值int。它需要一个string参数来解析,一个out int将包含解析后的值(如果成功)。如果成功,该方法本身将返回true

private static int GetIntFromUser(string prompt)
{
    int result;

    do
    {
        Console.Write(prompt);
    } while (!int.TryParse(Console.ReadLine(), out result));

    return result;
}

您不会显示ShowMenu的代码,但它可能会为用户提供一些菜单选项,并且我已经添加了返回用户输入的菜单选项的功能:< / p>

private static int ShowMenu()
{
    int menuChoice;

    do
    {
        Console.Clear();
        Console.WriteLine("Main Menu:");
        Console.WriteLine("1. Input an array item");
        Console.WriteLine("9. Print the numbers\n");
        menuChoice = GetIntFromUser("Enter your choice (1 or 9): ");
    } while (menuChoice != 1 && menuChoice != 9);

    return menuChoice;
}

现在,你似乎错过了另一件可能有帮助的事情,就是添加一个&#34;暂停&#34;打印出数组项后到程序,这样用户就有机会看到它们。我认为这可能是主要问题。目前你将它们全部写到屏幕上,然后while循环再次运行,你没有机会看到它。这是一个帮助方法,要求用户在准备好后按键,然后等待用户按键:

private static void WaitForUserInput()
{
    Console.Write("\nPress any key to continue...");
    Console.ReadKey();
}

我们还可以将代码放在一个单独的方法中填充数组。由于您希望一次只允许用户填充一个项目,我们需要跟踪要填充的下一个项目,因此我们将为此设置一个类级别变量,并使用它的方法。我们将填充该项目,然后递增变量。当然,我们必须首先确保下一个项目不大于可用项目的数量:

private static int NextIndexToPopulate = 0;

private static void PopulateNextArrayItem(int[] array)
{
    if (array == null) return;

    if (NextIndexToPopulate >= array.Length) 
    {
        Console.WriteLine("The array is full; no items left to enter.");
        WaitForUserInput();
    }
    else
    {
        array[NextIndexToPopulate] = GetIntFromUser("Enter number to insert: ");
        NextIndexToPopulate++;
    }
}

可以使用另一种方法打印出数组:

private static void PrintArray(int[] array)
{
    if (array == null)
    {
        Console.WriteLine("The array is null - nothing to print.");
    }
    else
    {
        Console.WriteLine("Here are the array items entered:");

        for (int i = 0; i < NextIndexToPopulate; i++)
        {
            Console.WriteLine(array[i]);
        }
    }
}

您也没有显示Login代码,所以这里使用的虚拟方法总是返回true:

private static bool Login(int first, int second)
{
    return true;
}

现在,在方法中封装了所有额外的东西,我们的主要代码变得更具可读性,错误的可能性更小,并且当出现错误时,它们更清楚它们是什么:

private static void Main()
{
    int[] myArray = new int[10];

    while (true)
    {
        int enteredNumber = ShowMenu();

        if (enteredNumber == 1)
        {
            PopulateNextArrayItem(myArray);
        }
        else if (enteredNumber == 9)
        {
            if (Login(1234, 3))
            {
                PrintArray(myArray);
                WaitForUserInput();
            }
        }
    }
}