2013-12-03 2 views
-2

Я думаю, что это очень простая задача, но поскольку я новичок в java, я нахожу это довольно сложным. Я получаю -1 все время, но когда я скомпилировать его вывод: 1. Может ли кто-нибудь объяснить мне, почему и как результат: 1. БлагодаряПолучение неправильного вывода с Java-арифметикой

class Test { 

    public static void main (String [] args) { 

     double x = 3.14; //3.14 
     int m = (int) (x-5); //3.14 - 5 = -1.83 --> (int)-1 
     int k = m + m * m -m; // -1 + (-1*-1) - 1 --> -1??? 
     System.out.println(k); // -1?? 

    } 
} 
+0

Ну, вы пробовали отлаживать его? Проверка значения m? –

+1

'-1 + (-1 * -1) - (-1)' – jonhopkins

+3

Ваша интерпретация '-1 + (-1 * -1) - 1' должна быть' -1 + (-1 * -1) - (-1) ' – Zong

ответ

1

Первая строка является данностью:

double x = 3.14; //3.14 

Вторая линия усечения результат вычитания:

int m = (int) (x-5); //3.14 - 5 = -1.83 --> -1 

на данный момент, это просто математика. Не забывайте, что вычитание отрицательного числа такого же, как при добавлении его абсолютное значение:

int k = m + m * m -m; // -1 + (-1*-1) - 1 --> -1 + 1 - (-1) --> 0 - (-1) --> 1 
  1. -1 + (-1 * -1) - (-1)
  2. -1 + 1 + 1
  3. 0 + 1
1

-1 + (-1 * -1) - (-1) = 1. Вы забыли вычесть отрицательное.

Смежные вопросы