我有一个C / C ++代码的功能,我希望将其转换为Java,但由于对该语言知之甚少,我不确定它的尝试是什么。
public P unknown(int min1, int max1, int min2, int max2)
{
this._a = this._a < min1 ? min1 : this._a;
this._a = this._a > max1 ? max1 : this._a;
this._b = this._b < min2 ? min2 : this._b;
this._b = this._b > max2 ? max2 : this._b;
return this;
}
我想知道为什么
this._a = this._a
这不是多余的吗? 代码是否应该在Java中执行以下操作?
public P unknown(int min1, int max1, int min2, int max2)
{
this._a < min1 ? this.a = min1 : this.a = this._a;
this._a > max1 ? this.a = max1 : this.a = this._a;
this._b < min2 ? this.b = min2 : this.b = this._b;
this._b > max2 ? this.b = max2 : this.b = this._b;
return this;
}
答案 0 :(得分:3)
this._a = this._a
在任何地方都不会显示为完整的陈述。表达式是包含三元运算符
this._a = this._a < min1 ? min1 : this._a;
所以声明实际上并不多余。
答案 1 :(得分:1)
三元运算符基本上是一个构建在单个表达式中的if语句;
if X ? do y : else do z
this._a = this._a < min1 ? min1 : this._a;
assign comparison then else
顺便提一下,您尝试转换的方法实际上已经是完全有效的Java,您不应该对它做任何事情!当它发生时,该方法中的所有内容在两种语言中都是相同的。
答案 2 :(得分:1)
这不是多余的,而只是语言的格式。
this._a = (this._a < min1) ? min1 : this._a;
表示该计划会将_a
与min1
进行比较,在?
之后指定第一个值,如果为真,则指定后者,如果为假。
您的java代码段做同样的事情
答案 3 :(得分:1)
我猜你没有正确理解三元运算符。它不是语句的条件块,而是条件表达式。
不是:
(condition) ? (what to do in case of true) : (what to do otherwise)
而是
(condition) ? (what the expression evaluates to in case of true) : (what otherw.)
所以... ? ... : ...
部分只是值,然后会在您的程序中分配给变量。
答案 4 :(得分:0)
此代码未执行this._a = this._a
,这将是愚蠢的。它使用三元运算符。
这是阅读的方式,希望对你有意义:
this._a = (this._a < min1 ? min1 : this._a);