У меня есть функция кода на 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;
}
this._a = this._a
нигде не отображается как полное утверждение. Выражение является частью оператора, который содержит троичный оператор
this._a = this._a < min1 ? min1 : this._a;
таким образом, заявление на самом деле не является избыточным.
Тернарный оператор — это в основном оператор if, встроенный в одно выражение;
if X ? do y : else do z
this._a = this._a < min1 ? min1 : this._a;
assign comparison then else
Кстати, метод, который вы пытаетесь преобразовать, на самом деле уже полностью допустимый Java, вам не нужно ничего с этим делать! Как это бывает, все в этом методе одинаково на обоих языках.
это не избыточно, а просто форматирование языка.
this._a = (this._a < min1) ? min1 : this._a;
означает, что программа будет сравнивать _a
с min1
, присваивая первое значение после ?
если верно или последнее, если ложно.
Ваш Java-фрагмент делает то же самое
Я полагаю, вы не правильно поняли троичного оператора. Это не условный блок операторов, а скорее условный выражение.
Это не:
(condition) ? (what to do in case of true) : (what to do otherwise)
скорее
(condition) ? (what the expression evaluates to in case of true) : (what otherw.)
Итак ... ? ... : ...
часть только значение который в вашей программе затем назначается переменной.
Этот код не делает this._a = this._a
, это будет глупо. Это использует троичный оператор.
Это способ чтения, надеюсь, он имеет смысл для вас:
this._a = (this._a < min1 ? min1 : this._a);