|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум 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 |
|
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить 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 |
|
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить 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 |
|
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить 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 | |
|