编写一个程序,并要求用户输入5个数字。如果一个数字有 之前输入的内容,显示错误消息并要求用户 重试。用户成功输入5个唯一数字后,对其进行排序 并在控制台上显示结果。
有人可以帮我吗?我真的对如何解决这个问题感到困惑。这是我的代码。
var number = new int[5];
Console.WriteLine("Enter 5 unique numbers");
for (int i = 0; i < 5; i++)
{
number[i] = Convert.ToInt32(Console.ReadLine());
var numberValue = number[i];
var currentNumber = Array.IndexOf(number, numberValue);
if (number[i] == number[0])
{
continue;
}
else
{
if (!(currentNumber == number[i]))
{
continue;
}
else
{
Console.WriteLine("Hold on, you already entered that number. Try again.");
}
}
/* foreach (var n in number) { ... } */
continue;
}
Array.Sort(number);
Console.WriteLine();
foreach (var n in number)
Console.WriteLine(n);
Console.WriteLine();
我无法在检查中找到解决方案,如果已经输入了相同的数字。请帮帮我。并请解释为什么是答案。
PS:能否请您仅使用简单的代码,而不使用HashSet之类的关键字?我知道这可以解决问题,但我还不知道。我只是想逐步学习C#,对此感到抱歉。.谢谢!
答案 0 :(得分:5)
让我们提取一种方法并使用HashSet<int>
来确保数字唯一:
using System.Linq; // We are going to use .ToArray()
...
private static int[] ReadUniqueNumbers(int count) {
HashSet<int> numbers = new HashSet<int>();
Console.WriteLine($"Enter {count} unique numbers");
while (numbers.Count < count) {
int number = 0;
if (!int.TryParse(Console.ReadLine(), out number))
Console.WriteLine("Syntax error. Not a valid integer value. Try again.");
else if (!numbers.Add(number))
Console.WriteLine("Hold on, you already entered that number. Try again.");
}
// Or if you want ordered array
// return numbers.OrderBy(item => item).ToArray();
return numbers.ToArray();
}
...
int[] number = ReadUniqueNumbers(5);
编辑:让我们使用没有旧HashSet
和 Linq 的旧循环:
private static int[] ReadUniqueNumbers(int count) {
int[] result = new int[count];
int numberCount = 0;
while (numberCount < count) {
int number = 0;
// When working with user input we should be ready for any string:
// user may well input "bla-bla-bla" (not an integer at all)
if (!int.TryParse(Console.ReadLine(), out number))
Console.WriteLine("Syntax error. Not a valid integer value. Try again.");
else {
bool found = false;
// Do we have duplicates?
// Linq (for reference only)
// found = result.Take(numberCount).Any(item => item == number);
for (int i = 0; i < numberCount; ++i)
if (result[i] == number) {
found = true;
break;
}
if (found) // Duplicate found
Console.WriteLine("Hold on, you already entered that number. Try again.");
else {
result[numberCount] = number;
numberCount += 1;
}
}
}
return result;
}
答案 1 :(得分:2)
var number = new int[5];
Console.WriteLine("Enter 5 unique numbers");
for (int i = 0; i < 5; i++)
{
while (true)
{
var newValue = Convert.ToInt32(Console.ReadLine());
var currentNumber = Array.IndexOf(number, newValue);
if (currentNumber == -1)
{
number[i] = newValue; // Accept New value
break;
}
Console.WriteLine("Hold on, you already entered that number. Try again.");
}
}
Array.Sort(number);
Console.WriteLine();
foreach (var n in number)
Console.WriteLine(n);
Console.ReadLine();
Array.IndexOf()返回数组中numberValue的索引,如果不存在则返回-1
答案 2 :(得分:1)
for (int i = 0; i < 5; i++)
{
var numberValue = Convert.ToInt32(Console.ReadLine());
var currentNumberIndex = Array.IndexOf(number, numberValue);
if (currentNumberIndex >= 0)
{
Console.WriteLine("Hold on, you already entered that number. Try again.");
i--;
}
else
{
number[i] = numberValue;
}
}
Array.IndexOf()
返回数组numberValue
的索引,如果不存在则返回-1。
答案 3 :(得分:1)
List<Int32> Numbers=new List<Int32>();
Console.WriteLine("Enter 5 unique numbers");
while (Numbers.Count<5) {
int result=-1;
Boolean IsNumber=Int32.TryParse(Console.ReadLine(),out result);
if (IsNumber==false) {
Console.WriteLine("Please enter a number!!!");
continue;
}
if (Numbers.IndexOf(result)>=0) {
Console.WriteLine("Hold on, you already entered that number. Try again.");
continue;
}
Numbers.Add(result);
}
答案 4 :(得分:1)
其他人已经粘贴了答案,但这是我的策略。它使用可为空的数组和"emmet.includeLanguages": {
"mako": "html"
}
来避免每次用户键入数字时都对数组中的数字进行迭代。
Contains
答案 5 :(得分:0)
inet_pton(3)
答案 6 :(得分:0)
public static void Main (string[] args) {
var numbers = new List<int>();
while(numbers.Count() < 5)
{
var line = Console.ReadLine();
int number;
if (int.TryParse(line, out number)) {
if (numbers.Contains(number))
Console.WriteLine("You already entered " + line);
else
numbers.Add(number);
} else
Console.WriteLine(line + " is not a number");
}
Console.WriteLine(string.Join(", ", numbers.OrderBy(i => i)));
}
答案 7 :(得分:0)
using System;
using System.Collections.Generic;
namespace exercise2
{
class Program
{
static void Main(string[] args)
{
//exercise 2 : question 3
Console.WriteLine("Please write 5 numbers");
var array = new int[5];
const int loop_leng = 5;
for(var i = 0; i < loop_leng; i++)
{
var input = Console.ReadLine();
if(string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("Re-try");
break;
}
int numbers = Convert.ToInt32(input);
foreach (var x in array)
{
if (numbers == x)
{
Console.WriteLine("don't repeat! re-try..");
break;
}
}
array[i] = numbers;
var a = Array.IndexOf(array, numbers);
var b = Array.LastIndexOf(array, numbers);
if(a != b)
{
if(array[a] == array[i])
{
break;
}
}
}
{
Console.WriteLine();
Array.Sort(array);
foreach (var n in array)
Console.WriteLine(n);
}
}
}
}
}
答案 8 :(得分:-2)
您犯了小错误。 您的书面代码 If(number [i] == number [0])将不起作用 正确答案 If(number [i] == number [i])