我希望用户输入10到100之间的10个数字,它们必须是唯一的,否则它会要求您输入新的数字。我能够让数组工作并接受10个数字,但它不会检查它与其他数字或我的值之间。在这段代码下面是我编写的代码,但它不是循环。任何帮助表示赞赏。
int a;
int[] arr = new int[10]; // The size of the array is 10
// Here the values are accepted from the user
for (a = 0; a <= 9; a++)
{
Console.Write("\nEnter your number:\t");
//Here is were all the storing is done
arr[a] = Convert.ToInt32(Console.ReadLine());
//Here is my check values for the inputted numbers
if (arr[a] < 10 || arr[a] > 100) // I tried using brackets and && nothing worked
{
// If they do not meet the correct information
Console.WriteLine
("You did not enter a valid number.");
--arr[a];
}
else
{
//When they do meet the correct values
Console.WriteLine("Thanks for entering the number " + arr[a]);
}
}
Console.WriteLine("\n");
//Here the inputted values are printed out
for (a = 0; a < 10; a++)
{
Console.WriteLine("You entered the number {0}", arr[a]);
}
Console.ReadLine();
我编写的代码不是循环。我试图用更少的写作和循环来做这个精确的代码。
Console.WriteLine("Please enter 10 numbers between 10 and 100. They cannot be identical.");
Retrypoint1:
int a = int.Parse(Console.ReadLine());
if ((a > 10) && (a < 100));
else
{
Console.WriteLine("The number you entered does not fall between 10 and 100.\r\n Please try again.");
goto Retrypoint1;
}
Retrypoint2:
int b = int.Parse(Console.ReadLine());
if ((b > 10) && (b < 100) && (b != a)) ;
else
{
Console.WriteLine("The number you entered does not fall between 10 and 100 \r\n or is identical to one of the other numbers. Please try again");
goto Retrypoint2;
}
Retrypoint3:
int c = int.Parse(Console.ReadLine());
if ((c > 10) && (c < 100) && (c != a) && (c != b)) ;
else
{
Console.WriteLine("The number you entered does not fall between 10 and 100 \r\n or is identical to one of the other numbers. Please try again");
goto Retrypoint3;
}
Retrypoint4:
int d = int.Parse(Console.ReadLine());
if ((d > 10) && (d < 100) && (d != a) && (c != b) && (d != c)) ;
else
{
Console.WriteLine("The number you entered does not fall between 10 and 100 \r\n or is identical to one of the other numbers. Please try again");
goto Retrypoint4;
}
Retrypoint5:
int e = int.Parse(Console.ReadLine());
if ((e > 10) && (e < 100) && (e != a) && (e != b) && (e != c) && (e != d)) ;
else
{
Console.WriteLine("The number you entered does not fall between 10 and 100 \r\n or is identical to one of the other numbers. Please try again");
goto Retrypoint5;
}
Retrypoint6:
int f = int.Parse(Console.ReadLine());
if ((f > 10) && (f < 100) && (f != a) && (f != b) && (f != c) && (f != d) && (f != e)) ;
else
{
Console.WriteLine("The number you entered does not fall between 10 and 100 \r\n or is identical to one of the other numbers. Please try again");
goto Retrypoint6;
}
Retrypoint7:
int g = int.Parse(Console.ReadLine());
if ((g > 10) && (g < 100) && (g != a) && (g != b) && (g != c) && (g != d) && (g != e) && (g != f)) ;
else
{
Console.WriteLine("The number you entered does not fall between 10 and 100 \r\n or is identical to one of the other numbers. Please try again");
goto Retrypoint7;
}
Retrypoint8:
int h = int.Parse(Console.ReadLine());
if ((h > 10) && (h < 100) && (h != a) && (h != b) && (h != c) && (h != d) && (h != e) && (h != f) && (h != g)) ;
else
{
Console.WriteLine("The number you entered does not fall between 10 and 100 \r\n or is identical to one of the other numbers. Please try again");
goto Retrypoint8;
}
Retrypoint9:
int i = int.Parse(Console.ReadLine());
if ((i > 10) && (i < 100) && (i != a) && (i != b) && (i != c) && (i != d) && (i != e) && (i != f) && (i != g) && (i != h)) ;
else
{
Console.WriteLine("The number you entered does not fall between 10 and 100 \r\n or is identical to one of the other numbers. Please try again");
goto Retrypoint9;
}
Retrypoint10:
int j = int.Parse(Console.ReadLine());
if ((j > 10) && (j < 100) && (j != a) && (j != b) && (j != c) && (j != d) && (j != e) && (j != f) && (j != g) && (j != h) && (j != i)) ;
else
{
Console.WriteLine("The number you entered does not fall between 10 and 100 \r\n or is identical to one of the other numbers. Please try again");
goto Retrypoint10;
}
Console.WriteLine("The numbers you entered were " + a + ", " + b + ", " + c + ", " + d + ", " + e + ", " + f + ", " + g + ", " + h + ", " + i + " & " + j);
Console.WriteLine("Please press enter to continue");
Console.ReadKey();
答案 0 :(得分:2)
问题在于:
if (arr[a] < 10 || arr[a] > 100) // I tried using brackets and && nothing worked
{
// If they do not meet the correct information
Console.WriteLine
("You did not enter a valid number.");
--arr[a];
}
使用--arr[a]
,您可以减少用户输入的值,也可以将其丢弃。你要写的是--a
而是。
要检查用户是否输入了数字双,您可以通过添加到if(…)
|| arr.Take(a).Contains(arr[a])
答案 1 :(得分:0)
你的问题在这里:
--arr[a];
您应该递减a
,而不是数组中的值。试试这个:
a--;
答案 2 :(得分:0)
这样的东西应该适合你,我使用TryParse过滤掉非数字字符和do while循环,我也使用Contains Linq Extension method来检查重复项。看看这是否适合你。
static void Main(string[] args)
{
int[] arr = new int[10];
int count = 0;
int a;
do
{
if (int.TryParse(Console.ReadLine(), out a)) //Verify that input is numeric
{
if ((a > 10) && (a < 100)) //Check Constraints
{
if (!arr.Contains(a)) //Check for duplicates
{
arr[count] = a; //Only if we get here then input into array
count++; //Increment to next Index
}
}
}
} while (count < 10); //Rinse and repeat to you get 10 valid entries
Console.ReadLine();
}
答案 3 :(得分:0)
我不想在第一时间存储无效输入:
Console.Write("\nEnter your number:\t");
int input = Convert.ToInt32(Console.ReadLine());
if (input < 10 || input > 100 || arr.Contains(input))
Console.WriteLine("You did not enter a valid number.");
else
{
arr[a] = input;
//When they do meet the correct values
Console.WriteLine("Thanks for entering the number " + arr[a]);
}
答案 4 :(得分:0)
一些问题,至少有两个问题已经提到过:
您的代码不会检查输入的文本实际上是否为数字。如果用户输入不的数字,Convert.ToInt32
将引发异常。
使用--arr[a]
您正在递减数组中a
位的值,而不是a
的值。
如果没有 非常 ,请不要goto
。即使在测试代码中也是如此。
这里有一些代码应该涵盖你要做的大部分内容:
int[] arr = new int[10];
for (int a = 0; a < 10; )
{
// Get number from user
Console.Write("Enter number: ");
string entered = Console.ReadLine();
int val;
// check for valid integer entered
if (!Int32.TryParse(entered, out val))
Console.WriteLine("Invalid number '{0}'", entered);
// check number in allowed range
else if (val < 10 || val > 100)
Console.WriteLine("Value '{0}' out of allowed range (10-100)", val);
// check number not already supplied
else if (a > 0 && arr.Take(a).Contains(val))
Console.WriteLine("Value '{0}' already entered");
// add to array
else
{
arr[a++] = val;
Console.WriteLine("Added value '{0}'. {1} remaining.", val, 10 - a);
}
}
答案 5 :(得分:0)
您可以尝试以下更多验证(请参阅注释代码):
static void Main(string[] args)
{
int[] arr = new int[10]; // The size of the array is 10
int input;
int savedNumCount = 0;
const int MIN = 10; // Use constant to set the range instead
const int MAX = 100; // of typing them in code
Console.WriteLine("Please enter 10 numbers between 10 and 100. They cannot be identical.");
do
{
if (int.TryParse(Console.ReadLine(), out input) == false)
{ // Check if number is entered
Console.WriteLine("Please enter a number.");
continue;
}
if (input < MIN || input > MAX)
{ // Check range
Console.WriteLine("The number you entered does not fall between 10 and 100.\r\n Please try again.");
continue;
}
if (savedNumCount == 0)
{ // Compare with existing numbers
arr[savedNumCount] = input; // No checking for 1st input
savedNumCount++;
}
else
{
if (!arr.Contains(input))
{
arr[savedNumCount] = input;
savedNumCount++;
}
else
{
Console.WriteLine("The number you entered is identical to one of the other numbers. Please try again");
}
}
}
while (savedNumCount < arr.Length);
string result = "The numbers you entered were ";
foreach (int num in arr)
result += num.ToString() + " ";
Console.WriteLine(result);
Console.WriteLine("Please press enter to continue");
Console.ReadKey();
}