嗨,我正在写一个基本程序来确定输入数字是否为素数。我有一个checkPrime(num)
函数,它检查素数,如果num是素数,则返回true
,否则返回false
。现在,在我的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");
}
}
当我编译时,我在条件语句行的while循环中得到错误Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement
。我不知道我错过了什么。这里也有类似的问题,人们已经回答说,条件运算符行是一个表达式,而不是一个语句,所以必须对表达式的值进行某种排序或赋值。MSDN参考资料中给出了类似的例子,其中的解释类似于
// ?: conditional operator.
classify = (input > 0) ? "positive" : "negative";
但我不能理解的是,在我的函数中,我所要做的只是检查函数的返回值,然后打印输出。那么,在我的例子中,这个表达的东西从哪里来呢。
条件运算符是表达式,而不是语句,这意味着它不能单独存在,因为必须以某种方式使用结果。在代码中,您不使用结果,而是尝试产生副作用。
根据?
之前的条件,运算符返回第一个或第二个表达式的结果。但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");
}
在这两个示例中,运算符根据条件返回两个字符串中的一个。这就是这个操作员的职责。
注意不需要比较checkPrime()
和true
的结果。结果已经是一个bool
。