-1

私はC#が初めてで、少し問題があります。ユーザーに 1 ~ 50 の整数を尋ね、奇数かどうかをコンソールに表示する簡単なプログラムを作成したいと考えています。だから、私が試したのはこれです:

 Console.WriteLine("Skriv ut ett heltal: ");
 int x = int.Parse(Console.ReadLine());

 if (x == 1,3,5,7,9,11,13,15,17,19)
 {
     Console.WriteLine("The number is odd");
 }
 else 
 {
     Console.WriteLine("The number is not odd");
 }

これで、if ステートメントの条件でエラーが発生します。どうすればこれを修正できますか?

4

9 に答える 9

11

ifC# では、1 つのステートメントを使用して変数をチェックするために複数の値を指定することはできません。このようにしたい場合は、各値 (1、3、5 など) を個別にチェックする必要があり、それは多くの冗長な入力になります。

この特定の例では、何かが奇数か偶数かを確認する簡単な方法は、モジュラス演算子を使用して 2 で割った後の剰余を確認することです%

if (x % 2 == 1)
{
   Console.WriteLine("The number is odd");
}
else 
{
    Console.WriteLine("The number is even");
}

ただし、本当にリストに対してチェックする必要がある場合はContains、配列に対してメソッドを使用するのが簡単な方法です (ICollection<T>本当に)。うまく簡単にするために、構文的にきれいな方法でリストをチェックできる拡張関数を書くこともできます。

public static class ExtensionFunctions
{
    public static bool In<T>(this T v, params T[] vals)
    {
        return vals.Contains(v);
    }
}

次に、次のように言うことができます。

if (x.In(1,3,5,7,9,11,13,15,17,19)) 
{
    Console.WriteLine("The number is definitely odd and in range 1..19");
}
else 
{
    Console.WriteLine("The number is even, or is not in the range 1..19");
}

出来上がり!:)

于 2013-07-09T01:04:53.643 に答える
4
if(x % 2 == 0)
{
// It's even
}
else
{
// It's odd
}
于 2013-07-09T01:04:46.620 に答える
4

x が特定のリストの数値かどうかをテストする場合:

int[] list = new int[]{ 1,3,5,7,9,11,13,15,17,19};
if(list.Contains(x)) 

整数が奇数かどうかを確認する一般的な方法は、2 で割り切れるかどうかを確認することです。

if(x % 2 == 1)
于 2013-07-09T01:05:57.940 に答える
1

x == 1,3,5,7,9,11,13,15,17,19複数のオプションを表現するための有効な構文ではありません。本当にこれを行いたい場合は、次のswitchステートメントを使用できます。

 switch(x) {
     case 1:
     case 3:
     case 5:
     case 7:
     case 9:
     case 11:
     case 13:
     case 15:
     case 17:
     case 19:
          // is odd
          break;
     default:
          // is even
          break;
 }

正しい方法は、モジュロ演算子を使用して、%次のようにすべての奇数を試すのではなく、数値が正確に 2 で割り切れるかどうかを判断することです。

if( x % 2 == 0 ) {
   // even number
}  else {
   // odd number
}
于 2013-07-09T01:05:06.850 に答える
1

それは有効な C# ではありません。そのようなセットの包含をテストすることはできません。いずれにせよ、世界中のすべての数値をテストすることは現実的ではありません。

代わりにこれを実行してみませんか。

if (x &1 == 1) // mask the 1 bit

ビット単位の操作は非常に高速であるため、コードは非常に高速である必要があります。

于 2013-07-09T01:05:52.500 に答える
1

他の人が指摘しているように、これはこの問題を解決する最善の方法ではありませんが、この場合にエラーが発生する理由は、if ステートメントでそのような複数の値を持つことができないためです。次のように表現する必要があります。

if (x == 1 || x == 3 || x == 5)

わからない場合||は、「または」の記号です

于 2013-07-09T01:07:08.523 に答える
0

次のことを試してください。

Console.WriteLine("Skriv ut ett heltal: ");
int x = int.Parse(Console.ReadLine());

Console.WriteLine(x % 2 == 1 ? "The number is odd" : "The number is not odd");

x % 2 == 1 は、入力に対して 2 のモジュラスを実行します (数値が 0 から 2 の間になるまで、できるだけ多くの '2' を取り除きます - この場合は 0 または 1 になります)

于 2013-07-09T01:05:23.100 に答える
0

それを行う1つの方法は次のとおりです。

if (x == 1 || 3 || 5){ 
Console.writeLine("oddetall");
}

または配列を作成することが可能です[]

int[] odd = new int[3]; // how many odd to be tested
if(x=odd){
Console.WriteLine("Oddetall");
}
于 2015-04-11T21:16:09.360 に答える