我需要一些我正在创建的C#程序的帮助。因此,在这种情况下,我正在向程序中输入重复值。例如,a,b,b,c,c。
练习是,如果输入任何重复的字母(没有数字),我应该收到一个错误,说明“重复值。请再试一次!”并且不接受重复值,并应将值显示为a,b,c,d,e。
class Program
{
static void Main(string[] args)
{
char[] arr = new char[5];
//User input
Console.WriteLine("Please Enter 5 Letters only: ");
for (int i = 0; i < arr.Length; i++)
{
arr[i] = Convert.ToChar(Console.ReadLine());
}
//display
for(int i = 0; i<arr.Length; i++)
{
Console.WriteLine("You have entered the following inputs: ");
Console.WriteLine(arrArray[i]);
}
}
}
答案 0 :(得分:1)
在开始时选择正确的数据结构,使用HashSet而不是数组,因为操作主要是查找&amp;插入
答案 1 :(得分:0)
使用Any
linq表达式来验证重复项。 char.TryParse
将验证输入并在成功时返回true
。
public static void Main()
{
char[] arr = new char[5];
//User input
Console.WriteLine("Please Enter 5 Letters only: ");
for (int i = 0; i < arr.Length; i++)
{
char input;
if(char.TryParse(Console.ReadLine(), out input) && !arr.Any(c=>c == input))
{
arr[i] = input;
}
else
{
Console.WriteLine( "Error : Either invalid input or a duplicate entry.");
i--;
}
}
Console.WriteLine("You have entered the following inputs: ");
//display
for(int i = 0; i<arr.Length; i++)
{
Console.WriteLine(arr[i]);
}
}
工作Code
答案 2 :(得分:0)
使用哈希表(通用词典)是确定是否已经遇到输入字符的有效方法。
此外,.NET框架中的Char.IsLetter方法是检查错误数据的好方法。
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="scan"
android:id="@+id/buttonScan"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/list"
android:layout_centerHorizontal="true"
android:layout_below="@+id/buttonScan" />
答案 3 :(得分:0)
阐述Shelvin使用HashSet的答案
HashSet<char> chars = new HashSet<char>();
//User input
Console.WriteLine("Please Enter 5 Letters only: ");
for (int i = 0; i < 5; )
{
char c = Convert.ToChar(Console.ReadLine());
if(!("abcdefghijklmnopqrstuvwxyz".Contains(c.ToString().ToLower())))
{
Console.WriteLine("Please enter an alphabet");
continue;
}
else if (!chars.Contains(c))
{
chars.Add(c);
i++;
}
else
{
Console.WriteLine("Duplicate value please try again");
continue;
}
}
//display
Console.WriteLine("You have entered the following inputs: ");
foreach(char c in chars)
Console.WriteLine(c.ToString());
Console.Read();
答案 4 :(得分:0)
保持简单,尽管HashSet
在语义上很好,但5个元素不需要它(在这种情况下它实际上比List
慢)。更糟糕的是,它需要一个并行结构来跟踪字符(假设您关心订单)。
显然,这些考虑事项对于这样一个小例子都不重要,但是如果实际测量的性能和内存消耗应该是大多数实际应用的指南,那么最好先学习它们并且不要总是跳到big-O表示法。 / p>
相反,您可以这样做: -
List<char> chars = new List<char>(5);
while (chars.Count < 5)
{
char c = Console.ReadKey().KeyChar;
if (!char.IsLetter(c)) continue;
if (chars.Contains(char)) continue;
chars.Add(char);
}
加上您要添加的任何错误消息。