Java

Поделитесь своими соображениями с начинающим java-"кодером")))Заранее спасибо!

public class Simple
{
public static void main( String args[])
{
int i;
for (i =2; i<100; i++)
{
if(i<8 & i!=4 & i!=6 ) System.out.println(i);
if ( i%2!=0 & i%3!=0 & i%5!=0 & i%7!=0) System.out.println(i);
}
}
}
Писал программу, которая находит все простые числа от 2 до 100. Сильный "говнокод"?
Есть ли надежда стать хорошим программистом? Занимаюсь дней 10, но не сильно усердно, так как не всегда есть время. Как Вы начинали? Через что проходили?
Кто ж так простые числа ищет? Ты бы ещё сам все простые числа нашёл и на них поделил... смешно. Создай динамический массив ArrayList с числами, кидай туда каждое новое простое число. Каждое следующее дели на известные простые числа. Всё.
МК
Максим Климентьев
81 458
Лучший ответ
Сергей Матвеев Я про массивы знаю пока только на уровне определения. Может когда дойду до них сделаю так, как Вы говорите. Я же написал 10 дней с полного нуля изучаю
Не особенно. Смотри как пример алгоритм - http://beginnersbook.com/2014/01/java-program-to-display-prime-numbers/
Лучше научись сначала искать ответы/примеры/документацию в интернете чем строить велосипед каждый раз заново.
SK
Shou Kohara
3 129
Также примерно и начинали: с небольших программ, которые что-нибудь делают с числами. Из минусов твоего алгоритма: если ты захочешь изменить 100 на большее число, программа будет работать не правильно и надо будет что-нибудь додумывать. Существует огромное количество алгоритмов нахождения простых чисел. Один из самых простых и эффективных написан выше.

По стилю: кода тут немного, поэтому и сказать особо нечего:

0) Общее правило: код ты пишешь один раз, а читать его будут несколько раз, особенно если это большой проект, поэтому старайся писать хорошо читаемый код.

1) int i;
for (i =2; i<100; i++)
Зачем объявление переменной выносит из for если после цикла ты ее не используешь? Можно (и нужно) писать так:
for (int i = 2; i < 100; i++)

2) Кстати, обрати внимание на пробелы: операции +, -* , /, =, +=, -=, /=, *=, <, >, =<, >=, !=, == и пр. с двух сторон отделяются пробелами для улучшения читаемости.

3) i++ не знаю как в Java, а в С++ советуют писать ++i. Функция i++ -внтури себя вызывает функция ++i. Получаются лишние команды. Работает дольше.

4) if(i<8 & i!=4 & i!=6 ) System.out.println(i);
Условие и оператор лучше писать на разных строчках, это улучшает читаемость:
if(i<8 & i!=4 & i!=6)
System.out.println(i);
В целом, старайся всегда писать, чтобы на одной строчке была только одна команда, это улучшает читаемость.

5) Даже если в блоке if только одно условие, оператор лучше писать в фигурных скобках:
if(i<8 & i!=4 & i!=6) {
System.out.println(i);
}

Если в будущем ты захочешь изменить код, например, добавив еще одно действие, скажем, вывести квадрат простого числа, ты можешь ошибиться забыв добавить фигурные скобки:
if(i<8 & i!=4 & i!=6)
System.out.println(i);
System.out.println(i*i);

Тогда работать будет не правильно. Лучше всегда писать в фигурных скобках.

6) if(i<8 & i!=4 & i!=6)
Тут и должны использоватся побитовые операции & или ты ошибся и должны быть логические && ? И каждый программист, кто полезет в твой код, задастся этим вопросом: сделал ты ошибку или все так и должно быть? О любых не очевидных действиях, лучше писать в комментариях.

---

Я начинал в школе / универе, делал лабы по информатике. Иногда перепечатывал программы из учебников.
Сергей Матвеев Я менял на 1000 и 100000.Вроде работает нормально....
Сергей Матвеев На счет выноса переменной из цикла, я поначалу так и делал, но почему-то выдавало ошибку. На счет фигурных скобок, то раньше видел так как Вы говорите, но потом открыл книгу Шилдта и там в начале не было фигурных скобок, вот я и перенял) Но на будущее учту Ваши замечания.