2016-11-08 2 views
-2

これは私のプログラムですが、その名前が既に配列に保存されていない場合、ユーザーがプログラムが最初に参照する名前を入力するとします。これは私が試したもので、contains.butを使ってみましたエラーは発生しません。 あなたは、そのコードが何を意味するのかを言わないなら、私には簡単な解決策を教えてください(私は初心者です)。類似の名前が2つ入力されていることを確認しますか?

{ 
     string naam;   
     Console.Write("geef je naam: "); 
     naam = Convert.ToString(Console.ReadLine()); 
     string[] array = new string[] {naam}; 

     while (naam != "") 
     { 
      Console.Write("geef je naam: "); 
      naam = Convert.ToString(Console.ReadLine()); 
      //array[naam.Length] = Convert.ToString(Console.ReadLine()); 

     } 
     if (array.Contains(naam)) 
     { 
      Console.Write("naam is al toegevoegd"); 
     } 

     while (naam == " ") 
     { 
      break; 
     } 


     Console.ReadLine(); 
    } 

これは私が行う練習問題です。友達の名前を要求するプログラムを作成します。

友人が追加されるたびに、友人の名前が確認されます。そうでなければ、友達の繰り返しをやめてください。

また、すべての友人がいる場合、パーティーの費用はどのくらいかを把握しています。

パーティーの料金は、友達1人につき10ユーロです。

拡張子:友人の名前が既に配列に存在する場合、その名前は2度目で追加されません。

+0

わかりましたので、あなたはいくつかのコードと目標を持っています。どのようにあなたが求めるものを達成していないのですか?エラーですか?あなたはあなたの質問で具体的にする必要があります。 – mason

答えて

0

たぶん、あなたは文字列のリストでこれを行うことができ、その後、あなたはあなたのリストに検索するためにLINQを使用することができます。このためHashset<string>のようなデータ構造を使用する

List<string> names = new List<string>(); 

if (names.Any(x => x.Contains(naam)) 
// stuff 
else 
names.Add(naam); 
1

良いです。ハッシュセットは、リストを反復することによってO(n)に仮定されたO(1)ルックアップを有する。

名前をハッシュセットに入れる前に名前を正規化することができます(たとえば、大文字と小文字を区別しないようにしたり、二重スペーシングなどを削除したくない場合など)。

var names = new HashSet<string>(); 
names.Add(NormaliseName("Tom")); 
names.Add(NormaliseName("Peter")); 
names.Add(NormaliseName("John")); 

var normalisedTestName = NormaliseName("Tony"); 
if (names.Contains(normalisedTestName)) 
{ 
    // Already exists 
} 
else 
{ 
    // Doesn't exist, add to hashset 
    names.Add(normalisedTestName); 
} 

private static string NormaliseName(string name){ 
    return name.ToLower().Trim(); 
} 
0
var namen = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase); 
bool gedaan = false; 

while (!gedaan) 
{ 
    Console.Write("geef je naam: "); 
    var naam = Console.ReadLine().Trim(); 
    gedaan = naam == ""; 

    if (!gedaan) 
    { 
     if (!namen.Add(naam)) 
     { 
      Console.WriteLine("naam is al toegevoegd"); 
     } 
    } 
}; 

Console.WriteLine($"totale party kosten: {namen.Count * 10} euro"); 

Console.ReadLine(); 
関連する問題