将代码片段转换为不必要的另一种语言= op?

时间:2013-12-20 00:15:11

标签: java c++ converter equals equality

我有一个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;
}

5 个答案:

答案 0 :(得分:3)

this._a = this._a在任何地方都不会显示为完整的陈述。表达式是包含三元运算符

的语句的一部分
this._a = this._a < min1 ? min1 : this._a;

所以声明实际上并不多余。

阅读:The Conditional (or Ternary) Operator (?:)

答案 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;

表示该计划会将_amin1进行比较,在?之后指定第一个值,如果为真,则指定后者,如果为假。

您的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);