|
Компьютерный форум 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 |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
--- Цитата lxa85:
P.S. ПРОГРАММУ ПЕРЕПИШУ И СЕГОДНЯ БУДЕТ НОВЫЙ КОД |
||
Последний раз редактировалось nomad____1, 26-04-2015 в 22:16. Отправлено: 20:16, 26-04-2015 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
|
|
Отправлено: 21:08, 26-04-2015 | #12 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать nomad____1, разница и игра слов процедура/метод от меня ускользают.
Будете приводить код, выделите пожалуйста, чтобы мы говорили об одном и том же. ---- nomad____1, Цитата lxa85:
![]() Iska, вообще подходит. Можно будет взять конус в довольно большом промежутке параметров и рассечь наклонной плоскостью. Это даст эллипс в сечении и останется только достроить треугольник до заданного. |
|
------- Отправлено: 23:54, 26-04-2015 | #13 |
Ветеран Сообщения: 740
|
Профиль | Отправить PM | Цитировать |
Отправлено: 07:04, 27-04-2015 | #14 |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Цитата User001:
P.S. Благодарю за поправку. Я ничего не доказываю просто объяснил точку зрения "почему я сделать так"... еще вчера после вашего сообщения все операторы выбора были заменены на строковые значения для большей информативности. Параметр "error" не был описан и по нему выполняется дефолтное значение. P.P.S. Начал изучать графический интерфейс. Скоро "упакую" эту прожку как конфетку и добавлю немного функционала. А пока надо ее довести до нормального вида. |
|
Последний раз редактировалось nomad____1, 27-04-2015 в 09:30. Отправлено: 09:21, 27-04-2015 | #15 |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
![]() Может быть это???
// // Проверка "на дурака" введенных значений, проверка планарности треугольника, проверка на прямоугольность // private void triangleTest() { // Проверка нет ли стороны с отрицательным значением или равным нулю if (aSide <= 0 || bSide <= 0 || cSide <= 0) { otvet = "minusovoe"; } else { // Проверка планарности треугольника if (((aSide + bSide) > cSide && (aSide + cSide) > bSide) && (bSide + cSide) > aSide) { testTriangl = true; } else { // Данные числа не могут соответствовать длине сторон треугольника otvet = "nesootvetstvie"; testTriangl = false; } } // Проверка на прямоугольность if (testTriangl == true) { float masivStoron[] = {aSide, bSide, cSide}; Arrays.sort(masivStoron); if ((masivStoron[2] * masivStoron[2]) == (masivStoron[0] * masivStoron[0] + masivStoron[1] * masivStoron[1])) { rightTriangle = true; } } } Цитата lxa85:
А вот и полностью сам код! Главный класс
Класс с методами
package square; import java.util.Arrays; public class Triangl { private float aSide; private float bSide; private float cSide; private double square; private double perimeter; private String otvet; private boolean testTriangl; private boolean rightTriangle; private float masivStoron[]; public Triangl(int aSide, int bSide, int cSide) { this.masivStoron = new float[]{aSide, bSide, cSide}; this.aSide = aSide; this.bSide = bSide; this.cSide = cSide; } //Собственный метод вывода private void print(String str) { System.out.println(str); } // // Проверка "на дурака" введенных значений, проверка планарности треугольника, проверка на прямоугольность // private void triangleTest() { // Проверка нет ли стороны с отрицательным значением или равным нулю if (aSide <= 0 || bSide <= 0 || cSide <= 0) { otvet = "minusovoe"; } else { // Проверка планарности треугольника if (((aSide + bSide) > cSide && (aSide + cSide) > bSide) && (bSide + cSide) > aSide) { testTriangl = true; } else { // Данные числа не могут соответствовать длине сторон треугольника otvet = "nesootvetstvie"; testTriangl = false; } } // Проверка на прямоугольность if (testTriangl == true) { float masivStoron[] = {aSide, bSide, cSide}; Arrays.sort(masivStoron); if ((masivStoron[2] * masivStoron[2]) == (masivStoron[0] * masivStoron[0] + masivStoron[1] * masivStoron[1])) { rightTriangle = true; } } } // // Вычисление площади // private void square() { if (testTriangl == true) { if (rightTriangle == true) { square = masivStoron[0] * masivStoron[1] / 2; } else { if (testTriangl == true) { perimeter = (aSide + bSide + cSide) / 2; square = Math.sqrt(perimeter * (perimeter - aSide) * (perimeter - bSide) * (perimeter - cSide)); } } otvet = "uspeshno"; } } // // Вывод ответа // public void valueOut() { this.triangleTest(); this.square(); switch (otvet) { case "minusovoe": print("Длина не может быть отрицательным числом"); break; case "uspeshno": print("Треугольник -" + testTriangl + "\nПрямоугольный -" + rightTriangle); System.out.printf("Площадь треугольника равна %.2f кв.ед\n", square); break; case "nesootvetstvie": print("У треугольника не может быть сторон с такими значениями"); break; default: print("\tхм... что то не так с программой... "); } } } |
||
Отправлено: 14:45, 28-04-2015 | #16 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Цитата nomad____1:
![]() private void square() { if (testTriangl == true) { if (rightTriangle == true) { square = masivStoron[0] * masivStoron[1] / 2; } else { if (testTriangl == true) { perimeter = (aSide + bSide + cSide) / 2; square = Math.sqrt(perimeter * (perimeter - aSide) * (perimeter - bSide) * (perimeter - cSide)); } } otvet = "uspeshno"; } } public void valueOut() { this.triangleTest(); this.square(); switch (otvet) { case "minusovoe": print("Длина не может быть отрицательным числом"); break; case "uspeshno": print("Треугольник -" + testTriangl + "\nПрямоугольный -" + rightTriangle); System.out.printf("Площадь треугольника равна %.2f кв.ед\n", square); break; case "nesootvetstvie": print("У треугольника не может быть сторон с такими значениями"); break; default: print("\tхм... что то не так с программой... "); } } Класс как результат вычисления square должен отдавать либо результат вычисления площади, либо отрицательное число с ошибкой. Анализ ошибки на стороне "пользователя" класса. Если уж хотите что-нибудь писать, пишите в стандартный поток ошибок. А заодно узнайте, что это за звери - стандартный поток ввода, стандартный поток вывода, стандартный поток ошибок. Заодно прочитайте про волшебную вещь перенаправления потоков. Анализ планарности треугольника происходит каждый раз при вычислении площади. Что ИМХО не есть правильно. Выставление флагов планарности и прямоугольности ИМХО должно выставляться в процессе задания параметров треугольника. (Сеттеры и геттеры) |
|
------- Отправлено: 18:25, 28-04-2015 | #17 |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
Цитата lxa85:
Цитата lxa85:
Цитата lxa85:
|
||||
------- Отправлено: 19:18, 28-04-2015 | #18 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать nomad____1, Конструктор - он конструирует. Он выполняется один раз при создании объекта. Объект создали, далее конструктор мы не дергаем.
А вот установку параметров (св-тв) объекта - это другая, более интересная и захватывающая история. Св-ва (поля) планарности и "прямоугольности" объекта Triangle надо сделать закрытыми (private), чтобы я не мог влиять на них извне. Ситуация. Я ввожу треугольник (1, 1, 6). Процедура установки параметров отрабатывает ситуацию и сбрасывает флаг планарности. Процедура вычисления площади, написанная как if planarity {square = ...} else {...}; отдаст ошибку. При этом я пологая, что для вычисления площади я не буду каждый раз "рассчитывать" условия планарности. Тогда я принудительно говорю объекту, что он планарен (triangle.planarity = true) и все, здравствуй не верная площадь. Поэтому признаки должны быть скрытыми (private) Модификация признаков - в процессе установки сторон треугольника. (Setter |
------- Отправлено: 21:04, 28-04-2015 | #19 |
Ветеран Сообщения: 740
|
Профиль | Отправить PM | Цитировать Цитата nomad____1:
Цитата nomad____1:
Цитата lxa85:
Цитата lxa85:
Цитата lxa85:
|
|||||
Отправлено: 10:20, 30-04-2015 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Правильность замены процессора | Вилка | Хочу все знать | 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 |
|