2015-06-25 2 views
2

Может ли кто-нибудь помочь мне с кодом C#. Я хочу рассчитать новое значение a значение - это значение рассчитывается следующим образом: a = a-2 * b, чем для того, чтобы увидеть, меньше ли результат , и если он находится в диапазоне (0, a). Обычно я делаю это несколькими шагами, но я нашел код в Интернете, который выглядит намного лучше, чем мой, и объяснение проблемы, которое решает код, похоже на мое, но я не уверен, что код написан в надлежащим образом или нет, потому что это не дает мне правильный результат. Кроме того, в коде отсутствует сообщение об ошибке.C# код для простых вычислений

a = a - 2 * b < 0 ? 0 : a; 

Действительно ли код подходит для того, что мне нужно, или нет?

+0

ли это '(а - 2) * b' или' а - (2 * б) ' вы пытаетесь вычислить? Поскольку приоритет оператора по умолчанию приведет к первому умножению, то вычитание. Также, как выглядит ваш код? –

+0

Я хочу сначала несколько кратных 2 * b –

+0

Этот код устанавливает 'a = 0', если' a - 2 * b' меньше 0. Если нет, он устанавливает его в значение –

ответ

3

Ваш код это:

int a; 

if((a - 2 * b) < 0) 
{ 
    a = 0; 
} 
else 
{ 
    a = a; 
} 

Который не имеет смысла, так как вы настроили a = a. Что я думаю, что вы хотите, это:

a = (a - 2 * b) < 0 ? 0 : (a - 2 * b); 
+0

Большое вам спасибо, теперь я понимаю, почему это не дает мне хорошего результата :) –

1
a = a - 2 * b < 0 ? 0 : a; 

То есть ярлык:

if (a - 2 * b < 0) { 
    a = 0; 
} else { 
    // a = a is a no-op. 
} 

, который, кажется, не соответствует вашему объяснению.

Я подозреваю, что вы хотите:

var oldA = a; 
a = a - 2*b; 
if (a < 0) { 
    // do something 
} else if (a < oldA) { 
    // do something else. 
} 
+0

Благодарим вас за подробное объяснение. –

4

код вы вывесили может быть написано, как это, может быть, это помогает убрать вещи:

 if (a - 2*b < 0) 
     { 
      a = 0; 
     } 
     else 
     { 
      //this assignment is not needed it is just here for clarification 
      a = a; 
     } 

и кстати я хочу отметить, что это не действительно важно, как компактный код, самое главное, как легко читать для вас и других. Поэтому, если вы можете читать, если другие выражения лучше, используйте их.

Ну 2 медленно;)

+0

Благодарим вас за разъяснение. Теперь я понимаю, где проблема. –

+0

Я не согласен с вами в том, что «это не очень важно, как компактный код» - это правда только в том случае, когда код объединяется. Но если вы можете сделать что-то в 1 строке кода, и этот код довольно легко читать - это всегда лучше, чем если вы делаете это в 5 строках. И это очень важно. Примером плохого кода являются вложенные выражения «if», когда вам просто нужен один «if» или ряд запросов LINQ, например .Where (condition) .Where (condition2) ... когда вы можете просто сделать .Where (condition && condition2) , Держите ваш код красивым и чистым! – Fabjan

+0

Ну, важно то, что его легко читать не только для вас, но и для других. Часто, если мы делаем код более компактным образом, как здесь, здесь, в этой теме это непросто прочитать для всех espacally для начинающих. Так зачем начинающему его использовать? Если все люди в вашей команде знакомы с этим штрафом, если кто-то еще не придет, кто не знаком. – PartTimeIndie

1

Вы также можете использовать switch заявление:

int newA = a - 2*b; 
byte option = newA < 0 ? 0 : newA < A? 1 : 2; 

switch(option) 
{ 
    case 0 : // your code for NewA < 0 break; 
    case 1 : // your code for NewA < A break; 
    case 2 : // your code for NewA > A break; 
} 
Смежные вопросы