Я бы просто перестать беспокоиться о том, как оценить приоритет, и использовать что-то вроде:
for (int i = 1; i <= 100; i++) {
if ((i % 42) == 0) continue;
if ((i % 6) == 0) println (i);
if ((i % 7) == 0) println (i);
}
Я предполагаю, что здесь 1-100 был включающий диапазон, в этом случае вы должны использовать <=
, а не <
. Это не имеет значения для вашего конкретного случая, поскольку 100 делится ни на 6, ни на 7.
Угадайте, что? Любой достойный оптимизирующий компилятор (включая JIT), вероятно, в конечном итоге будет генерировать тот же код, что и для всех других возможностей. И даже если бы это не так, неважно, если бы вы не называли эту функцию отличной многими раз.
Я думаю, что это чуть-чуть более читаемым, чем:
if (i % 6 == 0 || i % 7 == 0 && i % (6 * 7) != 0) ...
или, что еще хуже, Lisp, как вещь, которую вы должны будете превратить его, чтобы он работал правильно :-)
Имейте в виду одну возможность - вы можете изменить свой цикл, чтобы сделать его более эффективным (в семь раз), для конкретного случая с 6 и 7, таким образом:
for (int i = 7; i <= 100; i += 7)
if ((i % 6) != 0)
println (i);
Это использует сам for
цикл, чтобы проверить только кратные 7 и распечатать их, если они не также кратные 6.
Оператор Java Внеочередные: http://java.sun.com/docs/books/tutorial/java/nutsandbolts/Operat ors.html # nutsandbolts-priority –
Прохладный. Благодаря! Я ошибочно отделял три аргумента в моей голове и не думал о скобках ... – Joel
Вы не тот Джоэл, как «http: //www.joelonsoftware.com/', right –