2016-10-03 1 views
2

배열에 값을 받아들이는 프로그램을 만들고 있습니다 만 동일한 값을 두 번 입력하려고하면 값이 고유하면 계속 진행합니다.배열에 같은 번호가 없습니다

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

누군가 잘못된 정보를 말해 줄 수 있습니까?

+1

문제가 무엇인지 설명해주십시오 - 왜 코드가 작동하지 않는가? 그렇게 말하면, 당신이 복제 확인을하기 전에 당신이'charray [i] = Convert.ToChar ... '를 설정하고 있음을 볼 수 있습니다. 새 값을 지정하기 전에 중복 여부를 확인해야합니다. – Rob

+0

예를 들어 "r"을 입력하면 복제본이 표시됩니다. 그런 다음 "g"를 입력하면 복제가됩니다. 내가 입력 한 모든 것은 "복제"입니다. –

+0

그런데 중복 체크를 옮겨보고 작동하는지 확인해 보겠습니다. –

답변

3

배열의 모든 요소를 ​​방금 배열의 요소에 할당 한 요소와 비교하므로 방금 입력 한 항목과 함께 복제본을 찾을 수 있습니다.

당신이 실제로 원하는 것은 :이 방법은, (7)은 미세하지만 최적화 수준이 매우 가난 매우 느린 특별히 당신이 당신의 배열을 확장하는 경우입니다 그런데

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

이것이 유일한 방법입니다. 나는 루프와 if 문에 대한 내 둥지로 올바른 방향에 있다고 생각했습니다. –

+0

@Gravy_Train 둘 다 본질적으로 동일합니다. '포함'은 간단합니다. 'if (charray.Contains (x))'를 내부 루프로 대체 할 수 있습니다. 중요한 변경 사항은'i -'이고 할당 후 * 할당 확인 * 후에 체크 – Rob

+0

의미가 있습니다. Linq를 사용하려하지 않습니다. 나는 그 기초에서 더 많은 것을 이해할 때까지 그 자리에서 벗어나려고 노력하고있다. 고마워요. –

0

, 당신이보고 할 수 있습니다 해시지도의 개념. 그리고 다른 것들과 마찬가지로, 먼저 배열 내부에 입력을 삽입 했으므로, for는 항상 입력을 내부에서 찾은 다음 복제를 반환하므로 삽입 작업 전에 복제를 확인해야 할 수 있습니다.

+0

아직 초보자입니다. 이해 해주십시오. –

+0

나는 그것이 내가 당신에게 그런 개념을 연구하도록 권장 한 이유를 이해하고있다. 그래서 점차적으로 향상시킬 것이다. @ 필 응답은 정확하고 당장 당신을 위해 일할 것입니다. – Eisa

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