Я не думаю, что ОП на самом деле хотел, чтобы кто-то сделал за них домашнее задание, поэтому я продолжу отвечать на вопрос, который они фактически задали: как чередовать между двумя операциями в цикле ( чтобы они могли сохранить алгоритм, который они придумали :)
).
Существует изящный «трюк», который очень часто используется, когда мы хотим что-то сделать через каждую итерацию в большинстве языков программирования. Вы наверняка столкнетесь с этим в своей жизни, и это может вызвать недоумение, если вы не понимаете, что происходит, и вот оно!
Оператор по модулю (%
) даст остаток от деления между его операндами .
Например, рассмотрим следующее: 7 ÷ 2 = 3.5
При работе с целыми числами вы скажете, что 7 ÷ 2 = 3
, тогда у вас останется 1
.
В этом случае, когда все переменные равны int
с, в Java 7 / 2
будет 3
, а 7 % 2
- 1
.
Это по модулю для вас!
То, что интересно в этом операторе, присуще тому, что интересно в делении вообще, и в одном случае в частности: остаток от деления на 2
всегда либо 0
, либо 1
... и это * 1039. * чередуется ! Это ключевое слово здесь.
А вот и «уловка» (на самом деле это не уловка, это, в основном, шаблон, учитывающий, насколько широко он используется) для чередования операций на итерациях:
- принимает любую переменную, которая увеличивается каждую итерацию в цикле
- проверить остаток от деления этой переменной на
2
- если это
0
, сделайте что-нибудь, иначе (это будет 1
), выберите альтернативный путь!
В вашем случае, чтобы ответить на ваш реальный вопрос (хотя у других есть есть хорошие очки, я не пытаюсь отнять это у кого-либо), вы могли бы подумать об использовании чего-то подобного:
if( i % 2 == 0 ) {
// i is even, subtract
} else {
// i is odd, add
}
Это позволило бы вам продолжать работать с алгоритмом, который вы изначально придумали!