Объяснение
Вы устанавливаете свой флаг на false
, как только вы попали в первое не простое число, но вы забыли сбросить его для следующего запуска .
Таким образом, после нажатия 4 , который не является простым, это false
, а остается ложным .
Решение
Вы можете исправить это, просто добавив flag = true;
в начало вашего внешнего цикла. Поскольку флаг необходим только внутри цикла, вы также можете просто определить его прямо там:
public static void main(String[] args) {
for (int i = 2; i <= 100; i++) {
boolean flag = true; // "Resetting" the flag here
for (int j = 2; j < i; j++) {
if (i % j == 0) {
flag = false;
break;
}
}
if (flag) {
System.out.println(i);
}
}
}
Примечания
Имя переменной flag
- довольно плохое имя, как насчет isPrime
. Это было бы довольно идиоматично.
Это также может улучшить читабельность, если вы переместите чек в специальный метод:
public static boolean isPrime(int number) {
for (int j = 2; j < number; j++) {
if (number % j == 0) {
return false;
}
}
return true;
}
А затем используйте это так:
for (int i = 2; i <= 100; i++) {
if (isPrime(i)) {
System.out.println(i);
}
}