Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - правильность написания кода

Показать результаты: что лучше учить
awt 1 25.00%
swing 1 25.00%
javaFX 2 50.00%
Всего проголосовало: 4. Вы не можете голосовать в этой теме

Ответить
Настройки темы
Java - правильность написания кода

Аватара для nomad____1

Пользователь


Сообщения: 79
Благодарности: 1


Конфигурация

Профиль | Отправить PM | Цитировать


Здравствуйте. Интересует правильно ли я пишу код. Выучил ООП и сейчас перехожу к изучению awt, swing и javaFX. Быстро накидал простенькую прожку. Хотелось знать мнение по поводу составления кода .
главный класс

Код: Выделить весь код
package square;

import square.Triangle;

public class Square {

    public static void main(String[] args) {
        Triangle triangle = new Triangle(3, 4, 5);
        triangle.squareOut();
    }
}

клас с методамы и конструктором

Код: Выделить весь код
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

 

Аватара для nomad____1

Пользователь


Сообщения: 79
Благодарности: 1

Профиль | Отправить PM | Цитировать


Читаю о потоках и ошибках. Такого в уроках не рассказывали Но спасибо что указали. Это весьма полезно. Теперь все что вы писали мне стает более менее ясно. сегодня возьмусь за переписку программы полностью.
Цитата User001:
lxa85 имел ввиду потоки ввода / вывода. »
Я уже понял.
Цитата User001:
Букву жалко? »
Нууу...
Цитата User001:
Использовать строки весьма расточительно. Смотрите в сторону enum. »
Благодарю
Цитата User001:
Дополню. Вот тут про JS, но суть одинаковая. Обратите внимание на правило №1. »
Весьма интересно и полезно. Благодарю!

Отправлено: 11:12, 30-04-2015 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для nomad____1

Пользователь


Сообщения: 79
Благодарности: 1

Профиль | Отправить PM | Цитировать


Читал вот о таком примере.
Скрытый текст

Код: Выделить весь код
  Scanner scanner = new Scanner(System.in);
        int value = scanner.nextInt();
//выводим 
        System.out.println(value);

Достаточно толково. Это как в с++ консолин и консолаут) Просто судя по урокам и некоторой литературе то они это упускали. Следовательно я понял что такой шняги как в с++ нету.
Что касается сеттеров. То проверку каждой стороны можно прописать на "валидность" еще в сеттере. Конструктор можно не использовать. Но планарность проверяется после введения "правильных" сторон. После проверки планарности еще проверить на прямоугольность. Потом вычислить площадь и вывод в консоль? Я правильно понял (разбил так сказать на объекты). Если нет то пожалуйста напишите что за чем, а я попробую это написать.

P.S. Хотя я кое что уже придумал. Я понял как это все грамотно сделать.))) СПС

Цитата lxa85:
Класс как результат вычисления square должен отдавать либо результат вычисления площади, либо отрицательное число с ошибкой.
Анализ ошибки на стороне "пользователя" класса.
»

Последний раз редактировалось nomad____1, 30-04-2015 в 11:45.


Отправлено: 11:38, 30-04-2015 | #22


Аватара для nomad____1

Пользователь


Сообщения: 79
Благодарности: 1

Профиль | Отправить 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


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить 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 и его никто не видел.

Другая мысль
Я чуть позже картинок нарисую, может полегче станет, мне по крайней мере, должно, я верю.

Сортировка данных

Код: Выделить весь код
    private void sortSides() {
        float[] arraySides = {aSide, bSide, cSide};
        Arrays.sort(arraySides);
        aSide = arraySides[0];
        bSide = arraySides[1];
        cSide = arraySides[2];
    }

А вот это а-яй-яй. Это геометрическое нарушение. За это по рукам. В общем случае треугольник ABC =! CBA. Нельзя треугольник читать как попало, даже если очень хочется.

Прямоугольный треугольник
Код: Выделить весь код
    private boolean rightTriangle() {
        rightTriangle = false;
        if (aSide * aSide + bSide * bSide == cSide * cSide) {
            rightTriangle = true;
        }
        return rightTriangle;
    }

А зачем нам надо возвращать 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;
private float aSide; - это тоже процедура, возвращающая float ??! (ликбез для меня проведите пожалуйста)

Возвращаемые значения площади
Код: Выделить весь код
    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 кв.ед.
Почему возвращаемая площадь появляется только после явного указания метода вычисления? Разве у нее не должно быть "дефолтного"/правильного значения, вычисленного максимально правдоподобно?

Пока все, надо и другими делами заняться. Вспомню чего - напишу.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:09, 07-05-2015 | #24


Аватара для nomad____1

Пользователь


Сообщения: 79
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата lxa85:
Я чуть позже картинок нарисую, может полегче станет, мне по крайней мере, должно, я верю. »
это будет вери гуд... Что же... колледж и универ сломали мозг набекрень... Не зря я решил забрать доки с универа. Хочу правильно кодить. Нашел документацию гугловскою по форматированию кода и написанию. Почитаю завтра.
Цитата lxa85:
А зачем нам надо возвращать rightTriangle? Не устанавливать, а возвращать? »
Просто подумал может кому надо будет просто инфу прямоугольный он или нет. И метод возвращает значение переменной. Ей по умолчанию задается значение лож, а если проходит проверку то правда.
Цитата lxa85:
Что за глупость
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);
} »
я лоханулся с копипастом.
Цитата lxa85:
Э. Весь этот код - в основную процедуру. Ctrl-C, Ctrl-V и его никто не видел. »
понял в мейн класс переместить... т.к. оно тут не нужно...
Цитата lxa85:
А вот это а-яй-яй. Это геометрическое нарушение. За это по рукам. В общем случае треугольник ABC =! CBA. Нельзя треугольник читать как попало, даже если очень хочется. »
так то так... это было сделано ради удобности вычислений... знаю что неправильно...

очень жду рисунков... я пока как слепой котенок... мало знаю и мало ориентируюсь... зато пробую исправится

-------
________________________________________________________
Ты - то что ты ешь. Ешь людей - будь человеком


Отправлено: 01:58, 07-05-2015 | #25


Аватара для nomad____1

Пользователь


Сообщения: 79
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата lxa85:
private float aSide; - это тоже процедура, возвращающая float ??! (ликбез для меня проведите пожалуйста) »
Так это "глобальная" переменная для класса. Она "приват" - доступна только для методов из данного класса. И тип даны которые она может мстить флоат. Изменить из вне не получится. Только получить значение из геттера. Или я неправильно понял и применил?

класс пользователя

Код: Выделить весь код
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("Введенные данные не могут быть сторонами какой либо геометрической фигуры");
        }
    }
}

Оно неплохо тут вжилось)

А насчет этого могу сказать в свое оправдание только то как я думал.(
Скрытый текст


Код: Выделить весь код
private float rightTriangle;

 ...
какой то код
 ...

    private boolean rightTriangle() {
        rightTriangle = false;
        if (aSide * aSide + bSide * bSide == cSide * cSide) {
            rightTriangle = true;
        }
        return rightTriangle;
    }

Неудачный выбор названия переменной так как оно совпадает с названием метода. Только НО "rightTriangle;"-это переменная, а "rightTriangle();" - это метод. Сначала инициализируется переменная rightTriangle но она пустая так как изначально ей не присвоено никакого значения (хотя можно и было присвоить ложь). Потом в методе ей присваивается значение в зависимости пройдет условие или нет. А после булевский метод rightTriangle() возвращает значение. В даном случае он возвращает значение глобальной переменной.
Нужно было бы так написать.

Скрытый текст

Код: Выделить весь код
private float rightTriangle;

 ...
какой то код
 ...

    private boolean testRightTriangle() {
        rightTriangle = false;
        if (aSide * aSide + bSide * bSide == cSide * cSide) {
            rightTriangle = true;
        }
        return rightTriangle;
    }

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

Код: Выделить весь код
 if (triangle.isSetSides() == true) {
            if (triangle.isPlanarity() == true) {
                if (triangle.isRightTriangle() == true) {
                    triangle.getRightTriangleSquare();
                } else {
                    triangle.getGeronSquare();



Если что то не так то прошу исправить.!!!
так как правильно и красиво кодить это не заучить правила и писать по ним как под трафарет, а научится правильно думать, уметь проводить анализ.

-------
________________________________________________________
Ты - то что ты ешь. Ешь людей - будь человеком


Последний раз редактировалось nomad____1, 07-05-2015 в 02:46.


Отправлено: 02:16, 07-05-2015 | #26


Аватара для nomad____1

Пользователь


Сообщения: 79
Благодарности: 1

Профиль | Отправить 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


Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата nomad____1:
Просто подумал может кому надо будет просто инфу прямоугольный он или нет. И метод возвращает значение переменной. Ей по умолчанию задается значение лож, а если проходит проверку то правда. »
Про rightTriangle - а почему он где-то из planarity вызывается?
Цитата nomad____1:
public boolean setSides(float sideA, float sideB, float sideC) »
Внутри вы устанавливаете флаг, потом вызываете публичный метод, который проверяет этот флаг и возвращаете результат этого публичного метода. Не кажется сложным?

И, вообще, решите чего вы хотите от класса и от этого уже начинайте.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:20, 07-05-2015 | #28


Аватара для nomad____1

Пользователь


Сообщения: 79
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата User001:
Просто подумал может кому надо будет просто инфу прямоугольный он или нет. И метод возвращает значение переменной. Ей по умолчанию задается значение лож, а если проходит проверку то правда. »
Про rightTriangle - а почему он где-то из planarity вызывается? »
Проходит проверка на планарность, а потом вызывается метод по котором проверяется фигура на прямоугольность. Можно написать просто методы. Но все равно их вызвать надо будет в методе square() что бы метод сам подтянул что ему нужно для вычисления. Хм... так красивее было бы. Так и сделаю...

Цитата User001:
Внутри вы устанавливаете флаг, потом вызываете публичный метод, который проверяет этот флаг и возвращаете результат этого публичного метода. Не кажется сложным? »
метод не публичный, а закрытый и доступный только методам данного класса. Мне кажется не сложно. Проверка введенных значений, если проходит то вызывается метод который проверяет фигуру на планарность. Иначе стороны неправильно введены и программа дальше работать не будет. Я думал так правильно будет.

-------
________________________________________________________
Ты - то что ты ешь. Ешь людей - будь человеком


Отправлено: 15:30, 07-05-2015 | #29


Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата nomad____1:
метод не публичный, а закрытый и доступный только методам данного класса. »
Цитата nomad____1:
public boolean setSides(float sideA, float sideB, float sideC) {...
return isSetSides();} »
Цитата nomad____1:
public boolean isSetSides() »
Написано public.
Цитата nomad____1:
Проходит проверка на планарность, а потом вызывается метод по котором проверяется фигура на прямоугольность. »
Мне не совсем очевидно, что метод проверки на планарность делает что-то кроме проверки на планарность (дергает методы, которые еще и меняют состояние класса).
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:37, 08-05-2015 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - правильность написания кода

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Правильность замены процессора Вилка Хочу все знать 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




 
Переход