2016-06-01 21 views
2

こんにちは私は、入力番号が素数であるかどうかを見つけるための基本的なプログラムを書いていました。私はcheckPrime(num)関数を持って素数をチェックし、numが素数ならばtrueを返します。そうでなければfalseを返します。今私のmain()関数では、私は条件演算子を使ってコードを短縮しましたが、私は確信していないエラーが出ています。以下は私のコードです:C#条件演算子エラーステートメントとして代入、呼び出し、インクリメント、デクリメント、待機、および新しいオブジェクト式のみ使用可能

static void Main(String[] args) { 
    int n = Int32.Parse(Console.ReadLine()); 
    while (n-- > 0) { 
     int num = Int32.Parse(Console.ReadLine()); 
     (checkPrime(num) == true) ? Console.WriteLine("Prime") : Console.WriteLine("Not Prime"); 
    } 
} 

私はコンパイルするとき、私は条件文の行で私のwhileループでOnly assignment, call, increment, decrement, await, and new object expressions can be used as a statementとしてエラーが発生します。私は何が欠けているのか分かりません。同様の質問hereがあり、人々は条件付き演算子行が式ではなく式であると答えているので、式の値のソートや代入が必要です。例の同種の説明は、この

// ?: conditional operator. 
classify = (input > 0) ? "positive" : "negative"; 

のような何かをするしかし、私は理解することができないのですが、私の機能であるMSDN referenceに与えられている私がしようとしているすべての関数の戻り値をチェックし、その後、出力を印刷します。だから、この表現の事は私の場合どこに来ますか?

+3

[3進演算子を使用したメソッド呼び出し](http://stackoverflow.com/questions/5490095/method-callusing-ternary-operator) – Peter

答えて

7

conditional operatorは、の式であり、結果が何らかの形で使用されなければならないため、単独では使用できません。あなたのコードでは、結果を使用しないで、代わりにの副作用を生成しようとします。

?の前の条件に応じて、演算子は、第1式または第2式のいずれかの結果を返します。しかしConsole.WriteLine()の返品タイプはvoidです。したがって、演算子は返すものがありませんvoidは、?:演算子の有効な戻り値の型ではありません。だからvoid - 方法はここでは使用できません。

ですから、そのようなこと行うことができます:

while (n-- > 0) { 
    int num = Int32.Parse(Console.ReadLine()); 
    string result = checkPrime(num) ? "Prime" : "Not Prime"; 
    Console.WriteLine(result); 
} 

またはあなたがConsole.WriteLine()コール内の演算子を使用します。両方の例で

while (n-- > 0) { 
    int num = Int32.Parse(Console.ReadLine()); 
    Console.WriteLine(checkPrime(num) ? "Prime" : "Not Prime"); 
} 

、応じて、2つの文字列のいずれかを返す演算子を条件はです。それがこのオペレータのためのものです。


あなたはtruecheckPrime()の結果を比較する必要はありません。結果は既にboolです。

+0

説明のためにありがとうございました。わかった。私はいつもif-elseの1行の置き換えを考えましたが、あなたの説明は理にかなっています。再度、感謝します。 – Naphstor

関連する問題

 関連する問題