|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - правильность написания кода |
|
||||
awt |
![]() ![]() ![]() |
1 | 25.00% | |
swing |
![]() ![]() ![]() |
1 | 25.00% | |
javaFX |
![]() ![]() ![]() |
2 | 50.00% | |
Всего проголосовало: 4. Вы не можете голосовать в этой теме |
|
Java - правильность написания кода
|
![]() Пользователь Сообщения: 79 |
Здравствуйте. Интересует правильно ли я пишу код. Выучил ООП и сейчас перехожу к изучению awt, swing и javaFX. Быстро накидал простенькую прожку. главный класс
клас с методамы и конструктором
package square; public class Triangle { private int aSide; private int bSide; private int cSide; private double square; private double perimeter; public Triangle(int aSide, int bSide, int cSide) { this.aSide = aSide; this.bSide = bSide; this.cSide = cSide; } private void print(String str) { System.out.println(str); } public void square() { perimeter = (aSide + bSide + cSide) / 2; square = Math.sqrt(perimeter * (perimeter - aSide) * (perimeter - bSide) * (perimeter - cSide)); } public void squareOut() { this.square(); print("Площадь треугольника равна " + square); } } |
|
Отправлено: 11:28, 24-04-2015 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Код как код. Не обременен комментариями, не выполняет каких-либо сверх задач, содержит ошибку вычисления при реализации прямоугольного треугольника.
На мой взгляд процедура public void squareOut() { ... } лишняя. Я не люблю, когда за меня думает процедура. Т.е. я сам решу, какой текст следует писать, и нужен ли он мне вообще. Из более грубых ошибок - отсутствие проверки треугольника. Т.е. нельзя в планиметрии получить треугольник со сторонами 1, 1, 6. А в этой программе можно. Тоже касается и отрицательных величин. |
------- Отправлено: 13:21, 24-04-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
![]() |
|
Отправлено: 13:32, 24-04-2015 | #3 |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
Благодарю за ответ. Комментарии писать буду, а то я забываю что кроме меня еще кто то будет его читать. Насчет правил планиметрии так сказать "проверку на дурака" я не писал... просто хотел по быстрому накидать прожку. Сегодня допишу с учетом всех ошибок и скину сюда. Интересовало мнение насчет построения класса, методов, конструктора. Благодарю за критику. Если вы не против то по мере изучения я буду сливать сюда коды. Хотелось бы видеть от вас критику по их поводу. Мне кажется просто что так я научусь писать более менее нормальный код. |
|
Отправлено: 14:04, 24-04-2015 | #4 |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Еще можно ли использовать геттеры и сеттеры? А то много негативного о них в интернете написано... Или их использование будет дурным тоном?
|
|
------- Отправлено: 16:40, 24-04-2015 | #5 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать В "интернетах" много что пишут. Если специфика работы объекта подсказывает использования сеттера или геттера - то вполне.
Если сеттер и геттер "поганит" данные и вызывает неявное/непредсказуемое действие - тогда это проблема. nomad____1, setter и getter - это инструмент. Пользоваться им или нет - решать не мне. В данном случае в процедуру установки параметров можно прописать процедуру установки флага "валидности" треугольника. Тогда в процедуре вычисления площади будет проверяться условие планарности треугольника по флагу. Моветон? ---- nomad____1, как вам сказать. Точность - вежливость королей. По таким мелочам судят о специалисте. На счет построения конструктора класса и методов - сказать сложно. Ваш пример с одной стороны достаточно каноничен и в нем нет сложности, с другой оторван от реальности и практики. Те же прямоугольные треугольники здесь не учитываются. Ответ будет дан с определенной погрешностью (кстати вопрос "на засыпку" как специалисту: какая погрешность метода при вычислении площади прямоугольного треугольника?). Отсутствие условий планиметрии приведет к ошибке - вычислению корня из отрицательного числа (NaN). ---- Iska, а вот интересно. Допустим у нас некая выпуклая фигура, на плоскости которой я могу нарисовать треугольник со сторонами 1:1:6. И ... наверно собственно все. По данным сторонам я не смогу сказать какая это фигура? Допустим шар, сфера. Наверно нет. Получится у меня должны (пусть катеты) две стороны лежать на прямых плоскостях, а гипотенуза в 6 ед. должна быть свернута в гармошку. Так что ли? ---- P.S. Не стоит без особой надобности выделять текст жирным шрифтом. |
------- Отправлено: 22:00, 24-04-2015 | #6 |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать валидность треугольника УЧТЕНО И ДОРОБОТАНО
Цитата lxa85[I:
точность УЧТЕНО
Цитата lxa85:
![]() учтено. программу буду улучшать по мере изучения
Цитата lxa85:
Цитата lxa85:
Тут уже вопрос как заставить ее работать... У меня выводит 0. Так как не может вычислить целый квадратный корень. Цитата lxa85:
Вот код после доработки: главный класс
Класс с методами и конструктором
package square;
public class Triangle { private int aSide; private int bSide; private int cSide; private double square; private double perimeter; private int vuvod; public Triangle(int aSide, int bSide, int cSide) { this.aSide = aSide; this.bSide = bSide; this.cSide = cSide; } private void print(String str) { System.out.println(str); } // // Проверка "на дурака" введенных значение и вычисление площади // public void square() { // Проверка нет ли стороны с отрицательным значением или равным нулю if (aSide <= 0 || bSide <= 0 || cSide <= 0) { vuvod = 1; } else { // Проверка планарности треугольника if ((aSide + bSide) > cSide && (aSide + cSide) > bSide && (bSide + cSide) > aSide) { // Вычисление площади perimeter = (aSide + bSide + cSide) / 2; square = Math.sqrt(perimeter * (perimeter - aSide) * (perimeter - bSide) * (perimeter - cSide)); vuvod = 2; } else { // Когда данные числа не могут соответствовать длине сторон треугольника vuvod = 3; } } if (square == 0) { vuvod = 0; } } // // Вывод значения на экран // public void squareOut() { this.square(); switch (vuvod) { case 1: print("Длинна не может быть отрицательным числом"); break; case 2: print("Площадь треугольника равна " + square); break; case 3: print("У треугольника не может быть сторон с такими значениями"); break; default: print("\tхм... что то не так с программой... Советую заглянуть в метод square... \n\t Скорее всего программа не может добыть квадратный корень. "); } } } P.S. Сегодня ночью думаю скину код где будет проверка треугольника на прямоугольность и вычисление площади по отдельной формуле. Думаю использовать сравнение трех сторон. Две самые "мелкие" должны быть катетами. Дальше с помощю теоремы Пифагора проверить будет ли получена гипотенуза равна "нашей" введеной. пока мой извращенный мозг более простого не придумал))) ![]() P.P.S. Надеюсь етот смайл пробет стенку головой) |
|||||
Последний раз редактировалось nomad____1, 26-04-2015 в 16:05. Отправлено: 15:48, 26-04-2015 | #7 |
Ветеран Сообщения: 740
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
А по теме мои 5 копеек: Цитата nomad____1:
Цитата nomad____1:
Цитата nomad____1:
Цитата nomad____1:
Цитата nomad____1:
Цитата nomad____1:
Цитата nomad____1:
|
||||||||
Отправлено: 16:56, 26-04-2015 | #8 |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Цитата User001:
Цитата User001:
Насчет неправильного вывода то разобрался что нужно поменять типы данных переменных в которые записываются длинны сторон на флоаты или даблы. |
||
Последний раз редактировалось nomad____1, 26-04-2015 в 19:13. Отправлено: 17:32, 26-04-2015 | #9 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать nomad____1, касательно public'ов, static'ов и пр. я не скажу. Но переменная vuvod у меня вызывает подозрения.
Почему используется конструкция public void SquareOut. Почему не int или не double ? Я от программы хочу получить ответ. Желательно наиболее простой и пригодный для "дальнейшей эксплуатации". Мне совершенно не хочется заниматься парсингом строки (притом не возвращаемой в силу void). Чтобы сигнализировать об ошибке следует возвращать отрицательные значения. -1, -2 и т.д. Поведение разумеется должно быть описано в сопровождающей документации и в комментариях к процедуре. ---- Цитата nomad____1:
Напомню, речь шла про сеттеры, гетторы и ввод "флага валидности" треугольника. ---- Цитата nomad____1:
![]() |
||
------- Отправлено: 19:20, 26-04-2015 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Правильность замены процессора | Вилка | Хочу все знать | 9 | 07-05-2015 00:08 | |
C/C++ - Лабораторные работы ( проверка написания кода ) | xasn0w | Программирование и базы данных | 3 | 06-05-2015 21:47 | |
Правильность конфигурации | Leoz | Выбор отдельных компонентов компьютера и конфигурации в целом | 9 | 06-09-2009 22:15 | |
правильность конфигурации | belomor3000 | Выбор отдельных компонентов компьютера и конфигурации в целом | 5 | 15-09-2008 11:11 | |
Правильность работы сети | DimSher | Сетевые технологии | 5 | 18-02-2003 13:53 |
|