こんにちは私は入力数が素数であるかどうかを見つけるための基本的なプログラムを書いていた。素数をチェックし、numが素数の場合はtrue
を返し、それ以外の場合はfalse
を返すcheckPrime(num)
関数があります。 main()
関数で、条件演算子を使用してコードを短くしましたが、不明なエラーが発生します。以下は私のコードです:
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");
}
}
コンパイルすると、Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement
条件付きステートメント行でのwhileループ。何が欠けているのかわかりません。同様の質問 here があり、条件付き演算子行は式ではなくステートメントであると人々は答えているので、式の値には何らかのソートまたは割り当てが必要です。同じ種類の例が MSDNリファレンス に示されています。ここで、説明は次のようになります。
// ?: conditional operator.
classify = (input > 0) ? "positive" : "negative";
しかし、理解できないのは、関数の中で、関数の戻り値を確認して出力を出力することだけです。だから私の表現のどこにこの表現が来るのですか?.
条件演算子 は式であり、ステートメントではありません。つまり、結果を使用する必要があるため、スタンドアロンにすることはできません。何とかして。コードでは、結果を使用しませんが、代わりに副作用を生成してみてください。
_?
_の前の条件に応じて、演算子は最初または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つの文字列のいずれかを返します。これがこの演算子の目的です。
注checkPrime()
の結果をtrue
と比較する必要はありません。結果はすでにbool
です。