这是我的代码到目前为止我在用户输入时显示数组中的所有项目,并为删除重复项的重复数字创建错误消息并继续循环。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace midterm
{
class Program
{
static void Main(string[] args)
{
int size;
Console.WriteLine("How many numbers will you enter?");
size = Convert.ToInt32(Console.ReadLine());
int[] numbers = new int[size];
int i;
for (i = 0; i < size; i++)
{
Console.WriteLine("Enter number: ");
numbers[i] = Convert.ToInt32(Console.ReadLine());
}
for (i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (i != j)
{
if (numbers[j] == numbers[i])
{
int k = j;
while (k < size - 1)
{
numbers[k] = numbers[k + 1];
k++;
}
size--;
}
}
}
}
Console.WriteLine("Duplicate Removed:");
for (i = 0; i < size; i++)
{
Console.WriteLine(numbers[i]);
}
Console.ReadLine();
}
}
}
每当我去更改for循环或添加错误消息时,程序就会停止删除重复项,我真的很难过这个,有人可以帮我一把。
答案 0 :(得分:0)
看看LINQ
,它有一些很棒的功能可以用于收集操作。在你的情况下,我会做以下事情:
Distinct()
此处将数组过滤为唯一值。
int[] initialArray = new int[] { 1, 1, 2, 3, 4, 5 };
int[] noDuplicates = initialArray.Distinct().ToArray(); // [1,2,3,4,5]
答案 1 :(得分:0)
我建议使用List
代替array
。 List
允许您不必指定大小,就可以不断添加条目。
使用该列表,您可以在添加条目之前检查条目是否已存在,因此您无需remove
或delete
答案 2 :(得分:0)
简单来说,使用HashSet
HashSet<int> mySet = new HashSet<int>();
//...
for (i = 0; i < size; i++)
{
Console.WriteLine("Enter number: ");
int number = Convert.ToInt32(Console.ReadLine());
if (!mySet.Add(number))
{
Console.WriteLine("That was a duplicate. Try again");
i--;
}
}
如果必须使用数组:
for (i = 0; i < size; i++)
{
Console.WriteLine("Enter number: ");
int numbers = Convert.ToInt32(Console.ReadLine());
if (ExistsInArray(number, numbers))
{
Console.WriteLine("That was a duplicate. Try again");
i--;
}
else
{
numbers[i] = number;
}
}
然后:
private static bool ExistsInArray(number, numbers)
{
// Your code to search numbers for number and return true if found
// Left as an exercise for the OP
}
这里的一个重要注意事项是,检查您的阵列是否已包含您尝试添加的元素比在事后删除它要容易得多。如果已经存在,请不要再次添加。