数组中没有相同的数字

本文关键字:数字 数组 | 更新日期: 2023-09-27 18:09:52

我正在编写一个程序,它接受数组中的值,但是如果您尝试两次输入相同的值,它会拒绝,如果值是唯一的,则继续

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);
    }
}
谁能告诉我怎么了?

数组中没有相同的数字

你将数组中的每个元素与你刚刚分配给数组中的元素的内容进行比较,所以当然你总是会找到重复的…与您刚刚输入的项目。

你真正想要的是:

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);
}

顺便说一下,这种方法非常慢,特别是如果你扩展你的数组,7是好的,但优化水平非常差,你可能想看看哈希映射的概念。就像其他人说的,因为您首先将输入插入到数组中,for总是会在其中找到您的输入并返回重复的,因此您可能需要在插入操作之前检查是否重复。

我想提出以下实现方案:

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);