2016-10-03 10 views
2

配列に値を受け入れるプログラムを作っていますが、同じ値を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

あなたはあなたの配列の要素にあなたが割り当てたものとあなたの配列のすべての要素を比較していますので、もちろん、あなたは今入力した項目で常に複製を見つけることができます。

あなたが実際にしたいことは次のとおりです。

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

これはこれを行う唯一の方法ですか?私はループのために自分の巣を持って正しい軌道に乗っていると思った。 –

+0

@Gravy_Train両者は本質的に同じだが、「Contains」は単純に簡潔である。 'if(charray.Contains(x))'を内部のループに置き換えることができます。重要な変更は 'i - 'で、チェックの後に*割り当てを移動します。 – Rob

+0

しかし、 Linqを使用しようとしていません。私は基本的なことをもっと理解するまでそれを離れようとしています。ありがとうございました –

0

このアプローチは、特別に、非常に遅いところであなたは、アレイを拡張する場合、7は結構ですが、最適化のレベルが非常に悪く、あなたが見たいかもしれませんハッシュマップのコンセプト。そして、他の人が言ったように、あなたが最初にあなたの配列の中に入力を挿入するので、forはあなたの入力を常に見つけ出し、重複して返すので、挿入操作の前に重複をチェックしたいかもしれません。私は次の実装を提案したいと思います

+0

私はまだ初心者です、ご理解ください。 –

+0

私はそのような概念を勉強することをお勧めしましたので、徐々に改善します。 @Philの答えは正しいですし、すぐにあなたのために働くでしょう。 – 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); 
関連する問題