2016-05-22 1 views
0

intに変換されたオブジェクトが2で割り切れることを検出すると、オブジェクト配列値int 1-100と出力文字列テキスト "EVEN"を出力するC#コードの記述方法は?1から100の間の偶数について「EVEN」を出力する方法は?

class Program 
{ 
    static void Main(string[] args) 
    { 
     object[] numbers = new object[100]; 

     numbers = Enumerable.Range(1, 100).Cast<object>().ToArray(); 


     foreach (object number in numbers) 
     { 
      if(Convert.ToInt32(number) % 2 == 0) 
      { 
       number.ToString().Equals("Even"); 
      } 
      Console.WriteLine(number); 
     } 
     Console.Read(); 
    } 
} 
+0

なぜint []を使用しませんか?既にコードを単純化するでしょう。あなたは "EVEN"を出力しなければならず、例えばEVENの値を "EVEN"と比較しないでください – Bart

答えて

3

を教えてくださいあなたは持っている問題はここにある:

number.ToString().Equals("Even"); 

これはnumberの文字列表現を取得して、平等のためにそれを比較しています文字列Evenに対して、結果を何もしないでください。あなたが戻ってこれを考えても、それは意味がありません。が偶数ならばEvenを印刷したいからです。あなたの現在のプログラムでは

、あなたはこのようなことを行うことができます:あなたがきたかのように、それは思われないよう、改善される可能性があなたのプログラムとのいくつかは、そこにあると述べ

if (Convert.ToInt32(number) % 2 == 0) 
{ 
    Console.WriteLine("{0} is even", number); 
} 

C#の型システムのハングアップをちょうど得ました。

まず、あなたがそうのように100個のオブジェクトの配列を宣言されています。代わりにobjectを使用しての、

object[] numbers = new object[100]; 

あなたはすでにあなたが整数で仕事をしたい知っているので、あなたはintを使用する必要があります。

int[] numbers = new int[100]; 

次は、1から整数のシーケンスを生成している - 100

numbers = Enumerable.Range(1, 100).Cast<object>().ToArray(); 

Enumerable.Range()は整数のコレクションを返し、.ToArray()はそれを整数の配列に変換します。私たちは今、整数の配列を使用しているとして、そこobjectにそれらをキャストする必要がないので、これはのように簡略化することができます。これに行うことができる一つのさらなる簡素化があり

numbers = Enumerable.Range(1, 100).ToArray(); 

Enumerable.Range()は、整数の集合を表すIEnumerable<int>を返します。これは代わりに、100個の整数の配列を宣言する整数の集合を生成し、配列にそれらを変換し、numbersにそれらを割り当てるので、私たちが代わりにこれを行うことができますことを意味します

IEnumerable<int> numbers = Enumerable.Range(1, 100); 

することができ、他の変更はありここで行ったが、私はそうのは、ループを見てみましょうこの回答の最後で説明します:

foreach (object number in numbers) 
{ 
    if (Convert.ToInt32(number) % 2 == 0) 
    { 
     Console.WriteLine(number); 
    } 
} 

私たちが代わりにobject[]IEnumerable<int>を使用するコードを変更してきたように、私たちは今の宣言を変更することができますループ:

foreach (int number in numbers) 

IEnumerableを実装するタイプでは、foreachを使用できるため、これが可能です。

IEnumerable<Student> students = GetStudents(); 

我々はこのようなものを超えるループができます:

foreach (Student student in students) 

今、あなたのループに戻ってnumberintであることを、我々はドン」別の例として、場合に私たちは、学生のコレクションを持っていましたそれが偶数であるかどうかを確認する前に、objectからintに変換する必要があります。理解するための主なものは、あなたが既にあなたが使用したいのですがどのような種類を知ったときにいつでもすることができます、それは常に簡単になりますように、あなたは常に、それを使用するべきであるということです

foreach (int number in numbers) 
{ 
    if (number % 2 == 0) 
    { 
     Console.WriteLine("{0} is even", number); 
    } 
} 

:だからループのコードは、のように簡略化することができますあなたが書いたコード。完全なプログラムは現在、次のようになります。varキーワードを決定するためにimplicit type inferenceを利用している

var numbers = Enumerable.Range(1, 100); 

:私が述べた他の変更については

class Program 
{ 
    static void Main(string[] args) 
    { 
     IEnumerable<int> numbers = Enumerable.Range(1, 100); 

     foreach (int number in numbers) 
     { 
      if (number % 2 == 0) 
      { 
       Console.WriteLine("{0} is even", number); 
      } 
     } 
     Console.Read(); 
    } 
} 

を、あなたの整数の生成コードはに単純化することができnumbersタイプ。同様に、ループを次のように変更することもできます。

foreach (var number in numbers) 

ここでは暗黙の型推論については心配しません。私は完全性のためにもっと言及していますが、まず型システムを適切に使うことを学ぶべきです。

+0

OVERすべての修正がこのif-elseステートメントです。ご返信ありがとうございました。ありがとうございます。 if(Convert.ToInt32(number)%2 == 0) { Console.WriteLine( "is even"); } else if(!(Convert.ToInt32(number)%2 == 0)) { コンソール。WriteLine(数値); } – user3151548

+0

@ user3151548ようこそ、問題ありません。 :) –

1

あなたのコードはほとんど正しい(.Equals("Even")一部を除く)です。 foreach内部のコードはのように簡略化することができます。

 Console.WriteLine(number.ToString() + ((Convert.ToInt32(number) % 2) == 0 ? " is even" : "")); 

}

+0

Hey ffa構文エラーが発生しました:Console.WriteLine(number.ToString()+ Convert.ToInt32(number)%2 = = 0? "は偶数である::" "); – user3151548

+0

編集されたuser3151548コンパイルエラーが表示され修正できた場合は、投稿を編集してください。それ以外の場合は、コメントにエラーを含めれば、解決が早くなる場合があります。 – ffa

0

このコードスニペットを確認してください。

class Program 
    { 
     static void Main(string[] args) 
     { 
     var stringBuilder = new StringBuilder(); 

     var numbers = new List<object>(); 
     numbers = Enumerable.Range(0, 100).Cast<object>  ().ToList();    
     foreach (var number in numbers) 
     { 
      if (Convert.ToInt32(number) % 2 == 0)    
       stringBuilder.Append("EVEN");     
      else 
       stringBuilder.Append(number); 
     } 

     Console.WriteLine(stringBuilder.ToString()); 
    } 
} 

このスニペットはあなたの問題を解決することができれば、私は

+0

ちょうどコードを投稿するのではなく、変更した内容とその理由を説明することで、回答を改善することができます。 –

+0

おかげでハンスは私を訂正しました。 –

関連する問題