如何阻止用户编写数组中已存在的数字? 我试过这个:
int[] number = new int[5];
for ( int i=0; i<number.Length; i++)
{
Console.Write("Write a number : );
number[i] = int.Parse(Console.ReadLine());
int getindex = Array.IndexOf(number, number[i]);
if (number[i] == number[getindex])
Console.WriteLine("This number already exists");
}
但是,当我第一次写它时,它说它已经存在,所以它不起作用。
答案 0 :(得分:2)
使用哈希集,对于每个新号码,请检查。
如果它已经存在于hashset中,请忽略它
否则将其添加到哈希集并打印它
int[] numbers = new int[100];
HashSet<int> uniqueNums = new HashSet<int>();
for (int i=0; i < numbers.Length; i++)
{
int number = int.Parse(Console.ReadLine());
bool isNew = uniqueNums.Add(number);
if(!isNew) {
Console.WriteLine("This number already exists");
}
}
编辑:感谢@maccettura提供此提示,我们甚至不需要包含方法
为何选择此解决方案?
答案 1 :(得分:0)
但是,当我第一次写它时,它说它已经存在,所以它不起作用。
您将数字放入数组中,然后检查它是否存在!当然它就在那里,你只需把它放在那里。看到这些twolines:
number[i] = int.Parse(Console.ReadLine());
if (number[i] == number[getindex])
您仍处于i
如何阻止用户编写数组中已存在的数字?
实际上,在通过使用局部变量来捕获输入来检查存在之前,首先需要防止自己编写:
int localnumber = int.Parse(Console.ReadLine());
如果数字不存在,则IndexOf将返回-1
返回值
类型:System.Int32
如果找到,则整个数组中第一次出现值的从零开始的索引;否则,-1。
所以你可以检查一下:
int getindex = Array.IndexOf(number, localnumber );
if (getindex == -1)
{
Console.WriteLine("This number already exists Try again please");
// then you count i one position back so that the next valid number is inserted on the correct position
i--;
}
else
{
number[i] = localnumber;
}
答案 2 :(得分:-2)
var number = new int[10];
for (int i = 0; i < number.Length; i++)
{
Console.Write("Write a number : ");
int x = int.Parse(Console.ReadLine());
if (number.Contains(x))
{
Console.WriteLine("This number already exists");
i--; // retry for this index
}
else
{
number[i] = x;
}
}
如果您不想使用HashSet,请尝试这样的操作。