我正在尝试让用户在数组中输入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);
}
}
}
}
}
答案 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();
}
}
}
}