我正在创建一个接受值到数组中的程序,但如果你尝试输入两次相同的值,它会拒绝,如果值是唯一的,则继续。
using System;
public class Program
{
public static void Main()
{
char[] charray = new char[7];
Console.WriteLine("Enter 7 unique alphabetic characters: ");
for (int i = 0; i < charray.Length; i++)
{
charray[i] = Convert.ToChar(Console.ReadLine());
for (int j = 0; j < charray.Length; j++)
{
if (charray[i] == charray[j])
{
Console.WriteLine("Please enter a unique alphabetic character.");
}
}
}
Console.WriteLine(charray);
}
}
有人可以告诉我什么是错的吗?
答案 0 :(得分:3)
您正在将数组中的每个元素与您刚分配给数组中元素的内容进行比较,所以当然您总是会找到与您刚刚输入的项目重复的内容。
你真正想要的是:
void Main()
{
char[] charray = new char[7];
Console.WriteLine("Enter 7 unique alphabetic characters: ");
for (int i = 0; i < charray.Length; i++)
{
var x = Convert.ToChar(Console.ReadLine());
if (charray.Contains(x))
{
Console.WriteLine("Please enter a unique alphabetic character.");
i--;
}
else
{
charray[i] = x;
}
}
Console.WriteLine(charray);
}
答案 1 :(得分:0)
顺便说一下,如果你扩展你的数组,这种方法很慢,7很好,但优化程度很差,你可能想看看 哈希地图的概念即可。和其他人一样说,既然你首先在数组中插入输入,for会始终在里面找到你的输入并返回重复,你可能想在插入操作之前检查重复。
答案 2 :(得分:0)
我想提出以下实施方案:
char[] charArray = new char[7];
Console.WriteLine("Enter {0} unique alphabetic characters: ", charArray.Length);
int i = 0;
while (i < charArray.Length)
{
char inputChar = Console.ReadKey().KeyChar;
Console.WriteLine();
if (charArray.Contains(inputChar))
{
Console.WriteLine("Please enter a unique alphabetic character.");
}
else
{
charArray[i] = inputChar;
++i;
}
}
Console.WriteLine(charArray);