Я пытался решить головоломку A14, найденную по адресу http://chortle.ccsu.edu/CPuzzles/PartA/CpuzzlesAsection11.html, используя Java (с Eclipse), когда я наткнулся на некоторые неожиданные результаты.Вложенная петля дает неожиданные результаты
Головоломка требует, чтобы на каждой строке k печатались все целые числа, кратные 23 в диапазоне от 100 * k до 100 * k + 99 (где k - некоторый предел, такой как 11).
для цикла Уплотненного, что я в конечном счете используется для решения этой проблемы был:
for(i = 0; i <= k; i++){
for(j = 0; j <= 99; j++){
if((100 * i + j) % 23 == 0)
System.out.print(100 * i + j + " ");
}
System.out.println();
}
Однако, в моей первой попытке, я не ставил в круглых скобках 100 * I + J перед использованием по модулю разделения в If Заявление и оно произвело только одну строку результатов: «0 23 46 69 92» (по сравнению с правильным решением, которое дало мне 11 строк результатов: «0 23 46 69 92» в первой строке », 115 138 161 184 «во второй строке и т. д.).
Я пытался выяснить причину этого. Даже без круглых скобок я бы предположил, что оператор If использовал модульное деление по j, прежде чем объединять его с 100 * i. Однако, если бы это было так, не выдавало бы 11 строк (если k = 11) из «0 23 46 69 92» вместо одной строки?
спасибо. В этом есть смысл. На первой итерации i = 0, что приводит к добавлению 100 * 0 к остальной части левой части реляционного оператора. Условие будет по-прежнему истинным, если j% 23 == 0. Во второй итерации i = 1, в результате чего добавляется 100 * 1. После первой итерации условие всегда будет ложным. – ricky085