преобразование фрагмента кода в другой язык ненужно = op?

У меня есть функция кода на 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;
}

2

Решение

this._a = this._a нигде не отображается как полное утверждение. Выражение является частью оператора, который содержит троичный оператор

this._a = this._a < min1 ? min1 : this._a;

таким образом, заявление на самом деле не является избыточным.

Читать: Условный (или троичный) оператор (? 🙂

3

Другие решения

Тернарный оператор — это в основном оператор if, встроенный в одно выражение;

if X ? do y : else do z

this._a = this._a < min1 ? min1 : this._a;
assign    comparison       then   else

Кстати, метод, который вы пытаетесь преобразовать, на самом деле уже полностью допустимый Java, вам не нужно ничего с этим делать! Как это бывает, все в этом методе одинаково на обоих языках.

1

это не избыточно, а просто форматирование языка.

this._a = (this._a < min1) ? min1 : this._a;

означает, что программа будет сравнивать _a с min1, присваивая первое значение после ? если верно или последнее, если ложно.

Ваш Java-фрагмент делает то же самое

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.)

Итак ... ? ... : ... часть только значение который в вашей программе затем назначается переменной.

1

Этот код не делает this._a = this._a, это будет глупо. Это использует троичный оператор.
Это способ чтения, надеюсь, он имеет смысл для вас:

this._a = (this._a < min1 ? min1 : this._a);
0
По вопросам рекламы [email protected]