这段代码无法正常工作吗?返回(n>2)?n=5:n=4;

3
为什么会返回一个错误。
return (n > 2) ? n = 5 : n = 4;

但是这并不意味着

return (n > 2) ? n = 5 : n + 4;

根据情况,它不应该能够返回n吗?


4
返回 (n > 2) ? 5 : 4; 的翻译是:如果 n 大于 2,则返回 5,否则返回 4。 - Towsif Ahamed Labib
3
你需要翻译成哪种语言?这句话的上下文是什么?你遇到了什么错误? - Alejandro
那么三元运算符只用于返回条件语句变量的值吗? - BabyProgrammer
静态整型函数 Func(int n) { 返回 (n > 2) ? 5 : 4; }这是Java语法。 - BabyProgrammer
更新问题和错误消息,您因此获得了负评。 - Towsif Ahamed Labib
3个回答

4
您的代码无法编译,因为三元运算符的 运算符优先级 高于赋值运算符:

运算符优先级

  1. 后缀 (expr++ expr--)
  2. 一元 (++expr --expr +expr -expr ~ !)

...

  1. 三元 (? :)
  2. 赋值 (= += -= *= /= %= &= ^= |= <<= >>= >>>=)

在解析代码时。

(n > 2) ? n = 5 : n = 4;

它会像这样解析:

(n > 2) ? n = 5 : n     // ternary operator
                    = 4 // assignment operator

这将导致类似于以下的伪代码:
someResultValue 
                = value;

这种方式无法运行,你会得到类似以下的编译错误:

'Syntax error on token "=", <= expected'

或者

'Type mismatch: cannot convert from Object & Comparable<?> & Serializable to int'.

你可以使用括号将第三个参数括起来,让Java将其视为n = 4。代码应该是这样的:

return (n > 2) ? n = 5 : (n = 4);

非常感谢您提供详细的答案,这正是我所需要的。 - BabyProgrammer

0

语法: 条件 ? 表达式1 : 表达式2;

试试这个

public class Solution {
    public static void main(String[] args) throws IOException {
       int a = 10;
       int b = (a>5)?a=5:0;
       System.out.println("a = "+ a);
       System.out.println("b = "+b);
       
    }
}

输出: a = 5 b = 5


0

我认为您可能有语法错误。我在Chrome JS控制台中尝试过,可以正常工作! 问题的解决方案

更新: 一些人在评论中争论说我没有编写函数,因此我使用函数格式编写并获得了相同的结果!输入图像描述


该死,这很奇怪,由于某种原因它在Java中不起作用。 - BabyProgrammer
这不是函数的返回,这个答案缺少了主要概念。 - Towsif Ahamed Labib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接