2016-02-18 2 views
-3

Я знаю ответ на этот вопрос, но не понимаю логики.Пояснение к java-коду

Ищу для объяснения того, как конечные значения равны i=1951, j=0

int i = 60; 
int j = 50; 
int count = 0; 
while (count < 5) 
{ 
    i = i + i; 
    i = i + 1; 
    j = j - 1; 
    j = j - j; 
    count++; 
} 
System.out.println("i=" + i + ", j=" + j); 
+0

Сделайте сухую работу самостоятельно. Это легко –

+0

Какая часть дает вам проблемы? Если у вас другой результат, как вы пришли к нему? –

+0

Тело цикла работает 5 раз. Возьмите карандаш и бумагу и запишите значение i и j в конце каждого цикла. –

ответ

1

Существует простое объяснение на ваш вопрос:

Давайте всухую этот цикл в то время:

count = 0 i.e. (count<5): 
i = i + i -> i = 60 + 60 = 120; 
i = i + 1 -> i = 120 + 1 = 121; 
j = j - 1 -> j = 50 - 1 = 49; 
j = j - j -> j = 49 - 49 = 0; 
count = count ++ -> count= 0 + 1 = 1; 

count = 1 i.e. (count<5): 
i = i + i -> i = 121 + 121 = 242; 
i = i + 1 -> i = 242 + 1 = 243; 
j = j - 1 -> j = 0 - 1 = -1; 
j = j - j -> j = -1 - (-1) = 0; 
count = count ++ -> count= 1 + 1 = 2; 

count = 2 i.e. (count<5): 
i = i + i -> i = 243 + 243 = 486; 
i = i + 1 -> i = 486 + 1 = 487; 
j = j - 1 -> j = 0 - 1 = -1; 
j = j - j -> j = -1 - (-1) = 0; 
count = count ++ -> count= 2 + 1 = 3; 

count = 3 i.e. (count<5): 
i = i + i -> i = 487 + 487 = 974; 
i = i + 1 -> i = 974 + 1 = 975; 
j = j - 1 -> j = 0 - 1 = -1; 
j = j - j -> j = -1 - (-1) = 0; 
count = count ++ -> count= 3 + 1 = 4; 

count = 4 i.e. (count<5): 
i = i + i -> i = 974 + 974 = 1950; 
i = i + 1 -> i = 1950 + 1 = 975; 
j = j - 1 -> j = 0 - 1 = -1; 
j = j - j -> j = -1 - (-1) = 0; 
count = count ++ -> count= 4 + 1 = 5; 

Loop ломает теперь, как Count = 5.

Окончательные значения теперь будет I = 1951 и j = 0;

0

Ваше тело цикла может быть переписать следующим образом:

i = 2*i + 1 ;

j = 0 ;

У вас есть сделало комплекс тела петли излишне.

1

Пожалуйста, это просто для себя. Приложите некоторые усилия.

count  i  j 
0   121 0 
1   243 0 
2   487 0 
3   975 0 
4   1951 0 

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

0

J = 0

Это довольно очевидно, так как последняя операция в петле j = j - j, так j всегда будет 0 после того, что независимо от входного сигнала.

я = 1951

В цикле вы делаете i = i + i, а затем i = i + 1, поэтому после этих операций новый я это 2i + 1. Вы выполняете цикл 5 раз, чтобы вычислить 2(2(2(2(2i+1)+1)+1)+1)+1, и немного простой математики скажут вам, что это 1951, если мне было 60 изначально.

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