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

Компьютерный форум 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:
Написано public. »
Это сеттеры они должны быть публичными. Иначе они не будут доступными с других классов.
Цитата nomad____1:
Код: Выделить весь код
if (aSide + bSide > cSide && bSide + cSide > aSide && aSide + cSide > bSide) {
 planarity = true;
»
Это проверка на планарность и установка флага планарности (флаг нужен если например мы просто хотим получить инфу о планарности), а вызывает другой метод для того что бы обеспечить то что зовется "самостоятельность". Притом я же сказал
Цитата nomad____1:
Проходит проверка на планарность, а потом вызывается метод по котором проверяется фигура на прямоугольность. Можно написать просто методы. Но все равно их вызвать надо будет в методе square() что бы метод сам подтянул что ему нужно для вычисления. Хм... так красивее было бы. Так и сделаю... »
Будет правильнее сделать как я писал. Наверно так будет целесообразно. Есть методы которые что то проверяют, считают независимо. Но что бы оно обрело смысл то поместью вызов методов в метод square. Так просто при вызове данного метода будет выводится площадь сразу. Вся логика метода данного закрыта и недоступна для изменения. Мы сможем только вызвать данный метод на выполнение через публичный геттер или какое то промежуточное значение (так же через геттер (планарность, прямоугольность и т.д.)) но при этом не можем изменить значение для правильной логики и вычислений.

Цитата lxa85:
Зачем мы вводили флаг прямоугольности, если я могу его проигнорировать?
Код:
Код: Выделить весь код
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());
»
Вот например. Проигнорировать больше не получится. Будет выполнятся принудительно и последовательно. Я же кажется писал что перепишу. Сейчас времени нет. В течении 2-3 часов выложу. И еще кое что.
Цитата nomad____1:
Простите. Я не хотел обидеть. Без злости и задней мысли все пишу. Я просто так раскрываю свою точку зрения. Еще раз прошу прощения если показался дерзким или где то хамил. »

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


Отправлено: 14:12, 08-05-2015 | #31



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

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


Аватара для 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);
        triangle.getSquare();
        if (triangle.getSquare() <= 0) {
            System.out.println("Введены некорректные данные");
        }else{
            System.out.println("Площадь треугольника равна "+triangle.getSquare()+" кв.ед.");
        }
    }
}
методарий
Код: Выделить весь код
package mathprogram;

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 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;
        }
        return setSides;
    }

    private boolean planarity() {
        planarity = false;
        if (aSide + bSide > cSide && bSide + cSide > aSide && aSide + cSide > bSide) {
            planarity = true;
        }
        return planarity;
    }

    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;
        }

        return rightTriangle;
    }

    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;
    }

    private float rightTriangleSquare() {
        if (planarity == true && rightTriangle == true) {
            square = aSide * bSide / 2;
        }
        return square;
    }

    private float square() {
        if (planarity == true) {
            if (rightTriangle == true) {
                rightTriangleSquare();
            } else {
                geronSquare();
            }
        }
        return 0;
    }

    public float getGeronSquare() {
        planarity();
        geronSquare();
        return square;
    }

    public float getRightTriangleSquare() {
        planarity();
        rightTriangleSquare();
        return square;
    }

    public boolean isPlanarity() {
        return planarity;
    }

    public boolean isRightTriangle() {
        return rightTriangle;
    }

    public float getSquare() {
        planarity();
        rightTriangle();
        square();
        return square;
    }

    public float getaSide() {
        return aSide;
    }

    public float getbSide() {
        return bSide;
    }

    public float getcSide() {
        return cSide;
    }
}

Все защищено. Лишнего ничего нет. Тявкает то что ему сказано. Может и не тявкать если надо. Это уже мы выбираем. Стороны вводятся через сеттеры. Внутренние методы работают только то что надо, а именно считают и не вызываю других методов. Можно получить любые интересующие данные благодаря геттерам. Принудительно что то в логике изменить нельзя. Также класс сам считает более подходящим способом.

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


Отправлено: 23:06, 08-05-2015 | #32


Аватара для lxa85

Необычный


Contributor


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

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


nomad____1, хочешь иголку воткну?
Ну так, чтобы не скучно было?
В код не подглядывай, а утром поищи ошибку самостоятельно.
Если не найдешь - смотри тест. Но лучше сам.
Тест
Не, не, не! Не надо!
Да я ж под пару тройку спойлеров то точно спрячу ;)
Я предупреждал!
Код: Выделить весь код
        float sideA = 5; float sideB = 4; float sideC = 3;
        triangle.setSides(sideA, sideB, sideC);
        triangle.getSquare();
        System.out.println("Площадь треугольника равна "+triangle.getSquare()+" кв.ед.");
         
        sideA = 3; sideB = 4; sideC = 5;
        triangle.setSides(sideA, sideB, sideC);
        triangle.getSquare();
        System.out.println("Площадь треугольника равна "+triangle.getSquare()+" кв.ед.");

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

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

Отправлено: 00:28, 09-05-2015 | #33


Аватара для nomad____1

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


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

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


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

может этот кусок переписать
Код: Выделить весь код
    public float getRightTriangleSquare() {
        planarity();
        rightTriangleSquare();
        return square;
на такой
Код: Выделить весь код
    public float getRightTriangleSquare() {
        planarity();
        rightTriangle();
        if (rightTriangle == true) {
            rightTriangleSquare();
        } else {
            square = 0;
        }
        return square;
    }
а то как то совсем не фонтан.
и еще парочку...
Скрытый текст

было
Код: Выделить весь код
    private float square() {
        if (planarity == true) {
            if (rightTriangle == true) {
                rightTriangleSquare();
            } else {
                geronSquare();
            }
        }
        return 0;
    }
стало
Код: Выделить весь код
    private float square() {
        if (planarity == true) {
            if (rightTriangle == true) {
                rightTriangleSquare();
            } else {
                geronSquare();
            }
        }else{
            square=0;
        }
        return square;
    }

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

было
Код: Выделить весь код
    public float getRightTriangleSquare() {
        planarity();
        rightTriangleSquare();
        return square;
    }
стало
Код: Выделить весь код
    public float getRightTriangleSquare() {
        planarity();
        rightTriangle();
        if (rightTriangle == true&&planarity==true) {
            rightTriangleSquare();
        } else {
            square = 0;
        }
        return square;
    }

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

было
Код: Выделить весь код
    public float getRightTriangleSquare() {
        planarity();
        rightTriangleSquare();
        return square;
    }
стало
Код: Выделить весь код
    public boolean isRightTriangle() {
        planarity();
        if (planarity==true){
            rightTriangle();
        }else{
            rightTriangle=false;
        }
        return rightTriangle;
    }

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


Последний раз редактировалось nomad____1, 09-05-2015 в 01:24.


Отправлено: 00:50, 09-05-2015 | #34


Аватара для nomad____1

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


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

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


Цитата lxa85:
nomad____1, хочешь иголку воткну?
Ну так, чтобы не скучно было?
В код не подглядывай, а утром поищи ошибку самостоятельно.
Если не найдешь - смотри тест. Но лучше сам.
Тест
Не, не, не! Не надо!
Да я ж под пару тройку спойлеров то точно спрячу
Я предупреждал!
Код:
Код: Выделить весь код
float sideA = 5; float sideB = 4; float sideC = 3;
 triangle.setSides(sideA, sideB, sideC);
 triangle.getSquare();
 System.out.println("Площадь треугольника равна "+triangle.getSquare()+" кв.ед.");
sideA = 3; sideB = 4; sideC = 5;
 triangle.setSides(sideA, sideB, sideC);
 triangle.getSquare();
 System.out.println("Площадь треугольника равна "+triangle.getSquare()+" кв.ед."); »

Ахах)))) даже и не подумал) сортировку массива и пере присвоение убрал, а тут такой фейл оставил)))
Четко)
Я хотел написать метод нахождение минимума и максимума и с его помощью считать. Но как то вылетело. И пожалуйста скиньте рисунки которые обещали... Или будет массив и будет сортировка но только! в даном методе исключительно ради точности вычислений.

Зато сам еще потестил и нашел пару багов)))

P.S.
Утром перепишу)

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


Последний раз редактировалось nomad____1, 09-05-2015 в 10:40.


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


Аватара для nomad____1

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


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

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


С днем Великой победы товарищи!!!!

Для исправление данной "иголки" использовал массив и сортировку. Но только в данном методе. На остальные данные не влияет и на логику программы в целом.
Код: Выделить весь код
    private float rightTriangleSquare() {
        float [] arr={aSide, bSide, cSide};
        Arrays.sort(arr);
        if (planarity == true && rightTriangle == true) {
            square = arr[0] * arr[1] / 2;
        }
        return square;
    }
А вот переписанное!
мейн

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

import java.util.Scanner;

public class MathProgram {

    public static void main(String[] arg) {
        Triangle triangle = new Triangle();
        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.getSquare() <= 0) {
            System.out.println("Введены некорректные данные");
        } else {
            System.out.println("Площадь треугольника равна " + triangle.getSquare() + " кв.ед.");
        }
    }
}
методарий
Код: Выделить весь код
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;

    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;
        }
        return setSides;
    }

    private boolean planarity() {
        planarity = false;
        if (aSide + bSide > cSide && bSide + cSide > aSide && aSide + cSide > bSide) {
            planarity = true;
        }
        return planarity;
    }

    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;
        }
        return rightTriangle;
    }

    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;
    }

    private float rightTriangleSquare() {
        float [] arr={aSide, bSide, cSide};
        Arrays.sort(arr);
        if (planarity == true && rightTriangle == true) {
            square = arr[0] * arr[1] / 2;
        }
        return square;
    }

    private float square() {
        if (planarity == true) {
            if (rightTriangle == true) {
                rightTriangleSquare();
            } else {
                geronSquare();
            }
        } else {
            square = 0;
        }
        return square;
    }

    public float getGeronSquare() {
        planarity();
        geronSquare();
        return square;
    }

    public float getRightTriangleSquare() {
        planarity();
        rightTriangle();
        if (rightTriangle == true && planarity == true) {
            rightTriangleSquare();
        } else {
            square = 0;
        }
        return square;
    }

    public boolean isPlanarity() {
        return planarity;
    }

    public boolean isRightTriangle() {
        planarity();
        if (planarity == true) {
            rightTriangle();
        } else {
            rightTriangle = false;
        }
        return rightTriangle;
    }

    public float getSquare() {
        planarity();
        rightTriangle();
        square();
        return square;
    }

    public float getaSide() {
        return aSide;
    }

    public float getbSide() {
        return bSide;
    }

    public float getcSide() {
        return cSide;
    }
}

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


Отправлено: 20:18, 09-05-2015 | #36


Аватара для lxa85

Необычный


Contributor


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

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


nomad____1, хорошо, только маленькая поправка.
Код: Выделить весь код
    private float rightTriangleSquare() {
        if (planarity == true && rightTriangle == true) {
                    float [] arr={aSide, bSide, cSide};
                    Arrays.sort(arr);
            square = arr[0] * arr[1] / 2;
        }
        return square;
    }
Если треугольник непланарный и неправильный, то лишние действия нам не нужны.
P.S. На счет картинок. Почти все ошибки исправлены, поэтому они тебе здесь уже не нужны. Там уже ничего примечательного.

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


Последний раз редактировалось lxa85, 10-05-2015 в 11:12.

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

Отправлено: 22:41, 09-05-2015 | #37


Аватара для nomad____1

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


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

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


Цитата lxa85:
Если треугольник не планарный и не правильный, то лишние действия нам не нужны. »

Ок благодарю) Вашу поправку внесу в класс. Уже упаковал с помощью javaFX в оболочку. Теперь еще поднаростить функционал)))
Цитата lxa85:
Почти все ошибки исправлены »
А что не так еще осталось. Это уже ради интереса.

P.S.
Завтра допишу функционал еще... Как говорил
Цитата nomad____1:
девушка подкинула идею. Усложнить можно если треугольник задается в 2Д плоскости координатами вершин и потом в 3д плоскости. Соответственно написать конструкторы и написать пару методов для нахождения длинны отрезков заданных координатами их концов а далее по написанному моему трафарету. »

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


Отправлено: 00:18, 10-05-2015 | #38


Аватара для nomad____1

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


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

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


что можете посоветовать учить после завершения ООП. JavaFX немного понял принципы. Можно ли приступать к изучению JDBC, мавен, ант т в какой последовательности.

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


Отправлено: 21:19, 17-05-2015 | #39


Аватара для lxa85

Необычный


Contributor


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

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


nomad____1, мысль вслух.
Лучший учитель - это натура.
Учиться согласно поставленных целей.
Задачками мир наполнен более чем.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:03, 18-05-2015 | #40



Компьютерный форум 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




 
Переход