Непонятный код, цикл и поля

194
31 августа 2018, 10:10

Цикл: for (j = 2; j < i; j++), в чем заключается j<i. Как это понять? Откуда мы придумали j?

public class Za {
  public static void main(String args[]) {
    int i, j; // Объявление переменных i и j.
    boolean isprime; // Объявление переменной isprime
    for (i = 2; i < 100; i++) { // Объявление цикла
      isprime = true; //Вопрос: Зачем здесь это?

      for (j = 2; j < i; j++) /* Не ясно объявление цикла? Ведь i=2, 
         а тут опять пишем j=2 и еще пишем j<i (как это возможно если Они оба   
         равны 2). Вообще зачем, что написали внутри цикла */
        if ((i % j) == 0)
          isprime = false; // Непонятно, почему мы делим по модулю  и
                           // если без остатка вернется false
      if (isprime) // Не понятно эта управляющая конструкция
        System.out.println(i + " is prime.");
    }
  }
}
// Почему создается это: 
isprime = true;
// Проверить, делится ли число без остатка.
for (j = 2; j < i; j++)
  // Если число делится без остатка, оно простое
  if ((i % j) == 0)
    isprime = false;
Answer 1

Дописал пояснения комментариями в коде:

for (i = 2; i < 100; i++) { // перебираем все числа от двух до ста
  isprime = true; // если не доказано обратное - число простое

  for (j = 2; j < i; j++) //  перебираем все числа от двух до текущего числа (хотя достаточно до Sqrt(i))
    if ((i % j) == 0)
      isprime = false; // если остаток равен нулю, то текущее число i делится нацело на делитель j и простым быть не может. После этого должен стоять break, т.к. дальше искать делители бессмісленно
  if (isprime) // если не было найдено ни одного делителя, то число простое
    System.out.println(i + " is prime.");
}
Answer 2

Это алгоритм поиска простых чисел до 100, второй цикл это все числа меньше i-го для проверки(поэтому и j < i), а isprime - это обычный флаг, который в итоге проверяется для отображения числа в консоль.

Answer 3

// и это не ясно почему мы так сделали? ведь i=2 а тут опять пишем j=2

У вас i=2 только в первой итерации цикла по i, во всех последующих нет.

// и это не ясно, почему мы делим по модулю и говорим если без остатка то ошибка ( false)

Опять неверно, если делится без остатка то присваиваем булевой переменной значение false, а не ошибка. А вообще:

Домашние задания надо выполнять самостоятельно. Если у вас возник вопрос по домашнему заданию, не просите его сделать за вас. Задайте конкретный вопрос о проблеме, которую вы не можете решить. Программирование — это то, в чём надо разбираться самому, либо не заниматься им вовсе. Если для вас программирование — лишний предмет в учебной программе, есть сайты и люди на этих сайтах, выполняющие задания за материальное вознаграждение. Здесь предлагать выполнить работу за вас и наоборот — моветон.

Answer 4

Смысл в том, что это циклы, и ты говоришь, что выполняй внутренний цикл пока j < i, как только это неравенство перестанет выполняться то выйди из цикла. Это имеет смысл так как следующий раз i будет равно 3 4 5 и т.д. до 10

READ ALSO
Как отследить изменение в объекте?

Как отследить изменение в объекте?

Как в javascript можно отследить изменение свойства объекта и при изменении вызвать callBack? Например: objprop = true; При изменении obj

173
React приложение. Cross origin запрос

React приложение. Cross origin запрос

Решил попробовать Реакт

160
Почему сортировка по цене не работает?

Почему сортировка по цене не работает?

В методе sortProductsByPrice (sortOrder) сортировка не работает, когда я удаляю или добавляю продукты в dom при помощи слушателей(buttAddaddEventListener,buttDelete

165