|
Компьютерный форум 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 | Цитировать Читаю о потоках и ошибках. Такого в уроках не рассказывали
![]() Цитата User001:
Цитата User001:
![]() Цитата User001:
Цитата User001:
|
||||
Отправлено: 11:12, 30-04-2015 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Читал вот о таком примере.
Скрытый текст
Достаточно толково. Это как в с++ консолин и консолаут) Просто судя по урокам и некоторой литературе то они это упускали. Следовательно я понял что такой шняги как в с++ нету. Что касается сеттеров. То проверку каждой стороны можно прописать на "валидность" еще в сеттере. Конструктор можно не использовать. Но планарность проверяется после введения "правильных" сторон. После проверки планарности еще проверить на прямоугольность. Потом вычислить площадь и вывод в консоль? Я правильно понял (разбил так сказать на объекты). Если нет то пожалуйста напишите что за чем, а я попробую это написать. P.S. Хотя я кое что уже придумал. Я понял как это все грамотно сделать.))) СПС Цитата lxa85:
|
|
Последний раз редактировалось nomad____1, 30-04-2015 в 11:45. Отправлено: 11:38, 30-04-2015 | #22 |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Код переделал и представляю вашему вниманию. Прочитал о return-ах. На комментарии не скупился. О потоках ввода/вывода еще что то нашел, а вот об ошибках толком ничего. Если можете то скиньте ссылку/литературу
Main класс
package mathprogram; public class MathProgram { public static void main(String[] arg) { Triangle triangle = new Triangle(); triangle.inputSides(); if (triangle.isSetSides() == true) { if (triangle.isPlanarity() == true) { if (triangle.isRightTriangle() == true) { triangle.getRightTriangleSquare(); } else { triangle.getGeronSquare(); } } else { System.out.println("Данная фигура не может быть треугольником"); } if (triangle.isPlanarity() == true) { System.out.println("Площадь треугольника равна " + triangle.getSquare() + " кв.ед."); } } else { System.out.println("Введенные данные не могут быть сторонами какой либо геометрической фигуры"); } } } класс с методами
package mathprogram; import java.util.Arrays; import java.util.Scanner; public class Triangle { private float aSide; private float bSide; private float cSide; private boolean setSides; private boolean planarity; private boolean rightTriangle; private float square; //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * метод для ввода данных в консоль с клавиатуры */ //</editor-fold> public void inputSides() { Scanner input = new Scanner(System.in); System.out.println("Введите первую сторону"); float sideA = input.nextFloat(); System.out.println("Введите вторую сторону"); float sideB = input.nextFloat(); System.out.println("Введите первую сторону"); float sideC = input.nextFloat(); setSides(sideA, sideB, sideC); } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * сортировка массива и переназначение сторон для удобства. стороны А и В - * самые меньшие (катеты если треугольник прямоугольный), сторона С - самая * большая (гипотенуза если треугольник прямоугольный) */ //</editor-fold> private void sortSides() { float[] arraySides = {aSide, bSide, cSide}; Arrays.sort(arraySides); aSide = arraySides[0]; bSide = arraySides[1]; cSide = arraySides[2]; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * метод проверяющий введенные значения * * @param sideA * @param sideB * @param sideC * @return */ //</editor-fold> public boolean setSides(float sideA, float sideB, float sideC) { setSides = false; if (sideA > 0 && sideB > 0 && sideC > 0) { aSide = sideA; bSide = sideB; cSide = sideC; setSides = true; planarity(); sortSides(); } return isSetSides(); } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * метод проверяющий треугольник на планарность * * @return */ //</editor-fold> private boolean planarity() { planarity = false; if (aSide + bSide > cSide && bSide + cSide > aSide && aSide + cSide > bSide) { planarity = true; rightTriangle(); } return isPlanarity(); } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * метод проверяющий треугольник на прямоугольность * * @return */ //</editor-fold> private boolean rightTriangle() { rightTriangle = false; if (aSide * aSide + bSide * bSide == cSide * cSide) { rightTriangle = true; } return rightTriangle; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * метод вычисляющий площадь по теореме Герона * * @return */ //</editor-fold> private float geronSquare() { float perimeter = (aSide + bSide + cSide) / 2; square = (float) Math.sqrt(perimeter * ((perimeter - aSide) * (perimeter - bSide) * (perimeter - cSide))); return square; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * метод вычисляющий площадь по стандартной формулой для прямоугольного * треугольника * * @return */ //</editor-fold> private float rightTriangleSquare() { square = aSide * bSide / 2; return square; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * площадь вычисленная по теореме Герона * * @return */ //</editor-fold> public float getGeronSquare() { return geronSquare(); } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * площадь вычисленная стандартной формулой для прямоугольного треугольника * * @return */ //</editor-fold> public float getRightTriangleSquare() { return rightTriangleSquare(); } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return the setSides информация о том корректно ли были введены длины * сторон */ //</editor-fold> public boolean isSetSides() { return setSides; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return the planarity информация о планарности фигуры (можно ли ее * отнести к треугольникам с точки зрения классической планиметрии) */ //</editor-fold> public boolean isPlanarity() { return planarity; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return the rightTriangle информация является ли данный треугольник * прямоугольным */ //</editor-fold> public boolean isRightTriangle() { return rightTriangle; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return the square с помощью данной функции можно получить площадь * треугольника */ //</editor-fold> public float getSquare() { return square; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return the aSide с помощью данной функции можно получить значение стороны. * одна с самых маленьких сторон треугольника (предположительно один из * катетов если треугольник прямоугольный) */ //</editor-fold> public float getaSide() { return aSide; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return the bSide с помощью данной функции можно получить значение стороны. * одна с самых маленьких сторон треугольника (предположительно один из * катетов если треугольник прямоугольный) */ //</editor-fold> public float getbSide() { return bSide; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return * the cSide с помощью данной функции можно получить значение стороны. * самая большая сторона треугольника (предположительно гипотенуза если * треугольник прямоугольный) */ //</editor-fold> public float getcSide() { return cSide; } } Старался как мог. Реализовал интерфейс через который можно получить данные, но не изменить их. Так сказать обеспечил безопасность. Притом девушка подкинула идею. Усложнить можно если треугольник задается в 2Д плоскости координатами вершин и потом в 3д плоскости. Соответственно написать конструкторы и написать пару методов для нахождения длинны отрезков заданных координатами их концов а далее по написанному моему трафарету. Еще пару дней и это все упакую в красивую оболочку с кнопочками и полями. Но только если все написано правильно и нормально. Хочется довести все до ума. Заодно и набить руку. |
Последний раз редактировалось nomad____1, 06-05-2015 в 20:25. Отправлено: 19:51, 06-05-2015 | #23 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать nomad____1, ну ... блин, ну куда, ну с какого перепуга?
Ну не пхай ты в класс чего не попадя. Чаа. Я пишу ситуацию, скорректирую задачу. Затем, уж прости, порежу код. ---- Ситуация. Я кодер, сижу прожу. Случилось, что мне до зарезу понадобился треугольник. Я пишу ландшафтный дизайн, создаю обучалку, игру, занимаюсь графикой и строю программную модель объекта на пару тысяч полигонов. Цель. Зачем? Мне нужен класс треугольника, который отдает мне площадь, и чтобы не сильно врал в ответах. Поехали. Что за глупость public void inputSides()
public void inputSides() { Scanner input = new Scanner(System.in); System.out.println("Введите первую сторону"); float sideA = input.nextFloat(); System.out.println("Введите вторую сторону"); float sideB = input.nextFloat(); System.out.println("Введите первую сторону"); float sideC = input.nextFloat(); setSides(sideA, sideB, sideC); } одна мысль
Все текстовые вопросы - вне класса. Табу! Класс, если он не "болтливый", должен быть как безвольная скотинка. "Муу" - строго по команде.
Одна процедура вопросы задает, потом стороны запоминает, потом еще и другую вызывает. (Создает еще один экземпляр кода возврата, копию данных в ОЗУ, передачу управления, всё по полной программе вызова процедур) Что будет, если я захочу изменить треугольник? Мне надо вспоминать предыдущие стороны? Брр Класс должен обрабатывать те данные, которые я ему скажу. Не спрашивать меня, не строить умного, а молча кушать данные. Молча. Кушать. (почитал дальше) Э. Весь этот код - в основную процедуру. Ctrl-C, Ctrl-V и его никто не видел. Другая мысль
Я чуть позже картинок нарисую, может полегче станет, мне по крайней мере, должно, я верю.
Сортировка данных
А вот это а-яй-яй. Это геометрическое нарушение. За это по рукам. В общем случае треугольник ABC =! CBA. Нельзя треугольник читать как попало, даже если очень хочется. Прямоугольный треугольник
А зачем нам надо возвращать rightTriangle? Не устанавливать, а возвращать? Или в Java куда не ткни, попадешь в процедуру с функцией? public class Triangle { private float aSide; private float bSide; private float cSide; private boolean setSides; private boolean planarity; private boolean rightTriangle; private float square; Возвращаемые значения площади
public float getRightTriangleSquare() { return rightTriangleSquare(); } private float rightTriangleSquare() { square = aSide * bSide / 2; return square; } Triangle triangle = new Triangle(); triangle.inputSides(); System.out.println(triangle.getaSide()); System.out.println(triangle.getbSide()); System.out.println(triangle.getcSide()); System.out.println(triangle.getSquare()); System.out.println(triangle.getRightTriangleSquare()); System.out.println(triangle.getGeronSquare()); run: Введите первую сторону 7 Введите вторую сторону 6 Введите первую сторону 5 5.0 6.0 7.0 0.0 15.0 14.6969385 Площадь треугольника равна 14.6969385 кв.ед. Пока все, надо и другими делами заняться. Вспомню чего - напишу. |
------- Отправлено: 01:09, 07-05-2015 | #24 |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
![]() Цитата lxa85:
Цитата lxa85:
Цитата lxa85:
Цитата lxa85:
очень жду рисунков... я пока как слепой котенок... мало знаю и мало ориентируюсь... зато пробую исправится |
|||||
------- Отправлено: 01:58, 07-05-2015 | #25 |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
класс пользователя
package mathprogram; import java.util.Scanner; public class MathProgram { public static void main(String[] arg) { Triangle triangle = new Triangle(); // triangle.inputSides(); Scanner input = new Scanner(System.in); System.out.println("Введите первую сторону"); float sideA = input.nextFloat(); System.out.println("Введите вторую сторону"); float sideB = input.nextFloat(); System.out.println("Введите третью сторону"); float sideC = input.nextFloat(); triangle.setSides(sideA, sideB, sideC); if (triangle.isSetSides() == true) { if (triangle.isPlanarity() == true) { if (triangle.isRightTriangle() == true) { triangle.getRightTriangleSquare(); } else { triangle.getGeronSquare(); } } else { System.out.println("Данная фигура не может быть треугольником"); } if (triangle.isPlanarity() == true) { System.out.println("Площадь треугольника равна " + triangle.getSquare() + " кв.ед."); } } else { System.out.println("Введенные данные не могут быть сторонами какой либо геометрической фигуры"); } } } Оно неплохо тут вжилось) А насчет этого могу сказать в свое оправдание только то как я думал.( Скрытый текст
Неудачный выбор названия переменной так как оно совпадает с названием метода. Только НО "rightTriangle;"-это переменная, а "rightTriangle();" - это метод. Сначала инициализируется переменная rightTriangle но она пустая так как изначально ей не присвоено никакого значения (хотя можно и было присвоить ложь). Потом в методе ей присваивается значение в зависимости пройдет условие или нет. А после булевский метод rightTriangle() возвращает значение. В даном случае он возвращает значение глобальной переменной. Нужно было бы так написать. Скрытый текст
а это стоит наверное перебросить в другой класс. и тогда будет само выбирать как вычислять площадь и потом только по одной команде выводить значение которое более всего подходит, которое более точное. Скрытый текст
Если что то не так то прошу исправить.!!! так как правильно и красиво кодить это не заучить правила и писать по ним как под трафарет, а научится правильно думать, уметь проводить анализ. |
|
------- Последний раз редактировалось nomad____1, 07-05-2015 в 02:46. Отправлено: 02:16, 07-05-2015 | #26 |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Вот с утра не было дел. Шел дождь. Делать было нечего. Порция очередного "гавнокода"
![]() мейн
Дописано Ваш тест. package mathprogram; import java.util.Scanner; public class MathProgram { public static void main(String[] arg) { Triangle triangle = new Triangle(); // triangle.inputSides(); Scanner input = new Scanner(System.in); System.out.println("Введите первую сторону"); float sideA = input.nextFloat(); System.out.println("Введите вторую сторону"); float sideB = input.nextFloat(); System.out.println("Введите третью сторону"); float sideC = input.nextFloat(); triangle.setSides(sideA, sideB, sideC); System.out.println(triangle.getaSide()); System.out.println(triangle.getbSide()); System.out.println(triangle.getcSide()); System.out.println(triangle.getSquare()); System.out.println(triangle.getRightTriangleSquare()); System.out.println(triangle.getGeronSquare()); if (triangle.getSquare() <= 0) { System.out.println("введены некорректные данные"); } } } методарий
package mathprogram; import java.util.Arrays; public class Triangle { private float aSide; private float bSide; private float cSide; private boolean setSides; private boolean planarity; private boolean rightTriangle; private float square; //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * метод проверяющий введенные значения * * @param sideA * @param sideB * @param sideC * @return */ //</editor-fold> public boolean setSides(float sideA, float sideB, float sideC) { setSides = false; if (sideA > 0 && sideB > 0 && sideC > 0) { aSide = sideA; bSide = sideB; cSide = sideC; setSides = true; // sortSides(); planarity(); } return setSides; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * метод проверяющий треугольник на планарность * * @return */ //</editor-fold> private boolean planarity() { planarity = false; if (aSide + bSide > cSide && bSide + cSide > aSide && aSide + cSide > bSide) { planarity = true; rightTriangle(); } return planarity; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * метод проверяющий треугольник на прямоугольность * * @return */ //</editor-fold> private boolean rightTriangle() { rightTriangle = false; if (aSide * aSide + bSide * bSide == cSide * cSide || aSide * aSide + cSide * cSide == bSide * bSide || bSide * bSide + cSide * cSide == aSide * aSide) { rightTriangle = true; } square(); return rightTriangle; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * метод вычисляющий площадь по теореме Герона * * @return */ //</editor-fold> private float geronSquare() { if (planarity == true) { float perimeter = (aSide + bSide + cSide) / 2; square = (float) Math.sqrt(perimeter * ((perimeter - aSide) * (perimeter - bSide) * (perimeter - cSide))); } return square; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * метод вычисляющий площадь по стандартной формулой для прямоугольного * треугольника * * @return */ //</editor-fold> private float rightTriangleSquare() { if (planarity == true && rightTriangle == true) { square = aSide * bSide / 2; } return square; } private float square() { if (planarity == true) { if (isRightTriangle() == true) { rightTriangleSquare(); } else { geronSquare(); } } return 0; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * площадь вычисленная по теореме Герона * * @return */ //</editor-fold> public float getGeronSquare() { return geronSquare(); } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * площадь вычисленная стандартной формулой для прямоугольного треугольника * * @return */ //</editor-fold> public float getRightTriangleSquare() { return rightTriangleSquare(); } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return the setSides информация о том корректно ли были введены длины * сторон */ //</editor-fold> public boolean isSetSides() { return setSides; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return the planarity информация о планарности фигуры (можно ли ее * отнести к треугольникам с точки зрения классической планиметрии) */ //</editor-fold> public boolean isPlanarity() { return planarity; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return the rightTriangle информация является ли данный треугольник * прямоугольным */ //</editor-fold> public boolean isRightTriangle() { return rightTriangle; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return the square с помощью данной функции можно получить площадь * треугольника */ //</editor-fold> public float getSquare() { square(); return square; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return the aSide с помощью данной функции можно получить значение стороны. * одна с самых маленьких сторон треугольника (предположительно один из * катетов если треугольник прямоугольный) */ //</editor-fold> public float getaSide() { return aSide; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return the bSide с помощью данной функции можно получить значение стороны. * одна с самых маленьких сторон треугольника (предположительно один из * катетов если треугольник прямоугольный) */ //</editor-fold> public float getbSide() { return bSide; } //<editor-fold defaultstate="collapsed" desc="описание метода"> /** * @return the cSide с помощью данной функции можно получить значение стороны. * самая большая сторона треугольника (предположительно гипотенуза если * треугольник прямоугольный) */ //</editor-fold> public float getcSide() { return cSide; } } Теперь класс "сам" определяет лучший способ вычисления площади. В меру болтлив. Зря не "тявкает" в консоль. Сортировка массива была сделана для того что бы не писать такую колбасу так как мне показалось это не совсем эстетичным. rightTriangle = false; if (aSide * aSide + bSide * bSide == cSide * cSide || aSide * aSide + cSide * cSide == bSide * bSide || bSide * bSide + cSide * cSide == aSide * aSide) { rightTriangle = true; Флаги сделал доступными для чтения для того что бы можно было получить инфу например о планарности треугольника только. Или прямоугольность. Не всегда же программа должна только площадь считать. Так сказать наращиваю функционал. |
------- Последний раз редактировалось nomad____1, 07-05-2015 в 14:21. Отправлено: 14:07, 07-05-2015 | #27 |
Ветеран Сообщения: 740
|
Профиль | Отправить PM | Цитировать Цитата nomad____1:
Цитата nomad____1:
И, вообще, решите чего вы хотите от класса и от этого уже начинайте. |
||
Отправлено: 14:20, 07-05-2015 | #28 |
![]() Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Цитата User001:
Цитата User001:
|
||
------- Отправлено: 15:30, 07-05-2015 | #29 |
Ветеран Сообщения: 740
|
Профиль | Отправить PM | Цитировать Цитата nomad____1:
Цитата nomad____1:
Цитата nomad____1:
Цитата nomad____1:
|
||||
Отправлено: 07:37, 08-05-2015 | #30 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Правильность замены процессора | Вилка | Хочу все знать | 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 |
|