Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/92: Рейтинг темы: голосов - 92, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 17

Разработать классы, представляющие собой простейшие плоские геометрические фигуры

12.02.2015, 17:08. Показов 17413. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане! Крик о помощи
Разработать классы на языке Java, представляющие собой простейшие плоские геометрические фигуры (круг, равнобедренный прямоугольный треугольник, квадрат, эллипс).
У каждого из классов должен быть метод, возвращающий название фигуры, а также метод, вычисляющий площадь геометрической фигуры, вписанной в прямоугольник со сторонами a и b (под понятием «вписанный» подразумевается расположение фигуры в прямоугольной области, при которой она имеет наибольшую площадь). Оба метода должны быть непараметризированы, т.е. не принимать аргументов.
В классах должны быть реализованы следующие уникальные методы:
• для класса «круг» должен быть реализован метод, возвращающий длину окружности круга;
• для класса «треугольник» метод возвращающий периметр треугольника;
• для класса «квадрат» метод должен возвращать диагональ квадрата;
• для класса «эллипс», метод возвращает сумму большого и малого радиуса.
Значения сторон прямоугольной области должны быть скрыты (инкапсулированы) внутри класса, для доступа к этим полям должны быть разработаны открытые (публичные) методы для установки и чтения значений этих полей.
Следует продумать архитектуру классов с точки зрения наследования и полиморфизма.
При запуске программы пользователю предлагается меню с выбором действия:
1 – создать
2 – удалить
3 – вычислить площадь
0 – выход
При выборе любого пункта меню (кроме 0 – выход), пользователю предлагается меню с выбором типа фигуры:
1 – круг
2 – треугольник
3 – квадрат
4 – эллипс
Меню используется для уточнения, с объектами каких классов будет происходить работа (создание объекта, удаление объекта или вычисление площади объекта), после выполнения пунктов второго меню, программа возвращается в первое меню.
При выборе элемента меню «Создать» создаётся объект класса выбранной геометрической фигуры, у пользователя запрашиваются два параметра a и b, эти параметры передаются закрытым полям класса с помощью открытых методов.
Созданные объекты всех возможных классов геометрических фигур должны храниться в одной коллекции.
При выборе элемента меню «Удалить» из коллекции удаляется один любой объект выбранного класса. При отсутствии объекта выбранного класса в коллекции, пользователю сообщается, что объекты указанного класса в коллекции отсутствуют.
При выборе элемента меню «Вычислить» на экран необходимо вывести площадь каждого из объектов выбранного класса. После окончания цикла указывается общее количество элементов в коллекции, а также число объектов каждого класса.

И собственно вот, что я наваяла
Абстрактный класс-родитель
Java
1
2
3
4
5
6
7
public abstract class Figure {
   
    final double pi = 3.14;
     abstract String getName();
     abstract double getArea();
 
}
И четыре класса-наследника, выглядящих примерно одинаковым образом
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class Circle extends Figure{
    private int a;
    private int b;
    public void setA(int a)
    {
        this.a=a;
    }
    public void setB(int b)
    {
        this.b = b;
    }
    public int getA()
    {
        return a;
    }
    public int getB()
    {
        return b;
    }
 
    public String getName()
    {
       return "This is Circle";
    }
 
    public double getArea()
    {
        return b*b*pi;
    }
    public double getLength()
    {
        return b*pi;
    }
 
}
и класс с мейном(не доделан)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.*;
public class Figures {
    public static void main(String [] args)
    {
       /* List<Figure> list = new ArrayList<Figure>();
        Figure circle = new Circle();
        Figure square = new Square();
        Figure triangle = new Triangle();
        list.add(circle);
        list.add(square);
        list.add(triangle);
        System.out.println(list);*/
 
 
        System.out.println("1.Создать\n2.Удалить\n3.Вычислить площадь\n4.Выход");
 
        //BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        //String s = reader.readLine();
        //int n = Integer.parseInt(s);
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        switch(n)
        {
            case 1:
                break;
            case 2:
                break;
            case 3:
                break;
            case 4:
                break;
        }
    }
}
и вот, по прочтению нескольких книг, весь материал в голове перепутался, и "работа встала"
Хотелось бы задать несколько вопросов:
1.switch в switch'e - не лучшее решение. Как можно продумать меню?Создать отдельный класс?
2.если переменные а и b - закрытые, то правильно ли я понимаю, что их надо объявлять в каждом классе наследнике и прописывать геттеры и сеттеры?или я налила воды в код? можно ли что-то добавить к абстрактному классу?
3.общие советы
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.02.2015, 17:08
Ответы с готовыми решениями:

Разработать на языке C++ классы описывающие фигуры
Нужно разработать на языке C++ классы описывающие следующие фигуры: треугольник, круг, прямоугольник, трапеция, ромб. Для всех классов...

Перенести в новую строку из исходной строки слова, представляющие собой запись числа
Задан текст, состоящий из слов, записанных через пробелы или запятые. Длина текста не больше 255 символов. В тексте могут быть использованы...

Даны вещественные числа A и R, представляющие собой длину стороны квадрата и радиус круга
Даны вещественные числа A и R, представляющие собой длину стороны квадрата и радиус круга на плоскости. Написать программу, выводящую одно...

6
69 / 69 / 39
Регистрация: 22.05.2014
Сообщений: 311
14.02.2015, 05:50
Лучший ответ Сообщение было отмечено ildwine как решение

Решение

Добрый день сударыня

абстрактный класс
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public abstract class Figure {
    protected double a;
    protected double b;
 
    public Figure(double a, double b) {
        this.a = a;
        this.b = b;
    }
 
    public Figure() {}
 
    public double getA() {
        return a;
    }
 
    public void setA(double a) {
        this.a = a;
    }
 
    public double getB() {
        return b;
    }
 
    public void setB(double b) {
        this.b = b;
    }
 
    public abstract String getName();
 
    public abstract double getSquare();
}
конкретные классы

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Circle extends Figure {
    private double radius;
 
    public double getRadius() {
        return radius;
    }
 
    public void setRadius(double radius) {
        this.radius = radius;
    }
 
    public Circle(double a, double b) {
        super(a, b);
        radius = Math.min(a, b) / 2;
    }
 
    @Override
    public String getName() {
        return "Circle";
    }
 
    @Override
    public double getSquare() {
        return Math.PI * radius * radius;
    }
 
    public double getLength() {
        return 2 * Math.PI * radius;
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Triangle extends Figure {
    // катет
    private double leg;
    
    public double getLeg() {
        return leg;
    }
 
    public void setLeg(double leg) {
        this.leg = leg;
    }
 
    public Triangle(double a, double b) {
        super(a, b);
        leg = Math.min(a, b);
    }
 
    @Override
    public String getName() {
        return "Triangle";
    }
 
    @Override
    public double getSquare() {
        return leg * leg / 2;
    }
 
    public double getPerimeter() {
        return (2 + Math.sqrt(2)) * leg;
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Square extends Figure {
    private double x;
 
    public double getX() {
        return x;
    }
 
    public void setX(double x) {
        this.x = x;
    }
 
    public Square(double a, double b) {
        super(a, b);
        x = Math.min(a, b);
    }
 
    @Override
    public String getName() {
        return "Square";
    }
 
    @Override
    public double getSquare() {
        return x * x;
    }
 
    public double getDiagonal() {
        return Math.sqrt(2) * x;
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class Ellipse extends Figure {
    private double semiMajorAxis;
    private double semiMinorAxis;
 
    public Ellipse(double a, double b) {
        super(a, b);
        semiMajorAxis = Math.max(a, b) / 2;
        semiMinorAxis = Math.min(a, b) / 2;
    }
 
    public double getSemiMajorAxis() {
        return semiMajorAxis;
    }
 
    public void setSemiMajorAxis(double semiMajorAxis) {
        this.semiMajorAxis = semiMajorAxis;
    }
 
    public double getSemiMinorAxis() {
        return semiMinorAxis;
    }
 
    public void setSemiMinorAxis(double semiMinorAxis) {
        this.semiMinorAxis = semiMinorAxis;
    }
 
    @Override
    public String getName() {
        return "Ellipse";
    }
 
    @Override
    public double getSquare() {
        return Math.PI * semiMajorAxis * semiMinorAxis;
    }
 
    public double getAxisSum() {
        return semiMajorAxis + semiMinorAxis;
    }
}
менюшка
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
public class Menu {
    private final static int CREATE = 1;
    private final static int DELETE = 2;
    private final static int GET_SQUARE = 3;
    private final static int EXIT = 0;
 
    private List<Figure> figures = new ArrayList<>();
 
    public void start() {
        int userChoice = -1;
        while (true) {
            printMainMenu();
            userChoice = getUserIntInput();
 
            if (userChoice == EXIT)
                return;
 
            if (userChoice != CREATE && userChoice != DELETE && userChoice != GET_SQUARE && userChoice != EXIT) {
                System.out.println("Ошибка ввода");
                continue;
            }
 
            int figureType = -1;
            do {
                printFigureTypeMenu();
                figureType = getUserIntInput();
            } while (figureType != 1 && figureType != 2 && figureType != 3 && figureType != 4);
            switch (userChoice) {
                case CREATE:
                    System.out.println("Введите первую сторону");
                    double a = getUserDoubleInput();
                    System.out.println("Введите вторую сторону");
                    double b = getUserDoubleInput();
                    createFigure(figureType, a, b);
                    break;
                case DELETE:
                    boolean deleteResult = deleteFigure(figureType);
                    if (!deleteResult)
                        System.out.println("Таких фигур в списке нет");
                    break;
                case GET_SQUARE:
                    printAllSquares(figureType);
            }
            printFiguresStatus();
        }
 
    }
    
    private void printFiguresStatus() {
        System.out.println("Общее колличество фигур - " + figures.size());
        System.out.println("Общее колличество кругов - " + countFigures(1));
        System.out.println("Общее колличество треугольников - " + countFigures(2));
        System.out.println("Общее колличество квадратов - " + countFigures(3));
        System.out.println("Общее колличество эллипсов - " + countFigures(4));
    }
 
    private int countFigures(int type) {
        int result = 0;
        if (type == 1) {
            for (Figure figure : figures) {
                if (figure.getClass() == Circle.class) {
                    result++;
                }
            }
        }
        if (type == 2)
            for (Figure figure : figures) {
                if (figure.getClass() == Triangle.class) {
                    result++;
                }
            }
        if (type == 3)
            for (Figure figure : figures) {
                if (figure.getClass() == Square.class) {
                    result++;
                }
            }
        if (type == 4)
            for (Figure figure : figures) {
                if (figure.getClass() == Ellipse.class) {
                    result++;
                }
            }
 
        return result;
    }
 
    private void printAllSquares(int type) {
        if (type == 1) {
            for (Figure figure : figures) {
                if (figure.getClass() == Circle.class) {
                    System.out.println(figure.getSquare());
                }
            }
        }
        if (type == 2)
            for (Figure figure : figures) {
                if (figure.getClass() == Triangle.class) {
                    System.out.println(figure.getSquare());
                }
            }
        if (type == 3)
            for (Figure figure : figures) {
                if (figure.getClass() == Square.class) {
                    System.out.println(figure.getSquare());
                }
            }
        if (type == 4)
            for (Figure figure : figures) {
                if (figure.getClass() == Ellipse.class) {
                    System.out.println(figure.getSquare());
                }
            }
    }
 
    private void createFigure(int type, double a, double b) {
        if (type == 1)
            figures.add(new Circle(a, b));
        if (type == 2)
            figures.add(new Triangle(a, b));
        if (type == 3)
            figures.add(new Square(a, b));
        if (type == 4)
            figures.add(new Ellipse(a, b));
    }
 
    // будем удалять самый первый элемент если он есть
    // если что-то удалилось - вернет тру
    private boolean deleteFigure(int type) {
        if (type == 1) {
            for (Figure figure : figures) {
                if (figure.getClass() == Circle.class) {
                    figures.remove(figure);
                    return true;
                }
            }
        }
        if (type == 2)
            for (Figure figure : figures) {
                if (figure.getClass() == Triangle.class) {
                    figures.remove(figure);
                    return true;
                }
            }
        if (type == 3)
            for (Figure figure : figures) {
                if (figure.getClass() == Square.class) {
                    figures.remove(figure);
                    return true;
                }
            }
        if (type == 4)
            for (Figure figure : figures) {
                if (figure.getClass() == Ellipse.class) {
                    figures.remove(figure);
                    return true;
                }
            }
        return false;
    }
 
    private void printMainMenu() {
        System.out.println("1 - создать");
        System.out.println("2 - удалить");
        System.out.println("3 - площадь");
        System.out.println("0 - выход");
    }
 
    private void printFigureTypeMenu() {
        System.out.println("1 – круг");
        System.out.println("2 – треугольник");
        System.out.println("3 – квадрат");
        System.out.println("4 – эллипс");
    }
 
    private int getUserIntInput() {
        Scanner scanner = new Scanner(System.in);
        int result = scanner.nextInt();
        return result;
    }
 
    private double getUserDoubleInput() {
        Scanner scanner = new Scanner(System.in);
        double result = scanner.nextDouble();
        return result;
    }
}
ну и запустить программу
Java
1
2
3
4
5
public class RunApplication {
    public static void main(String[] args) {
        new Menu().start();
    }
}
Можно поподправлять отступами между текстом из разных меню
2
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 17
14.02.2015, 17:46  [ТС]
Ууух..Спасибо Вам огромное, буду разбираться
0
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 17
21.02.2015, 16:08  [ТС]
появился еще вопрос.
нужно несколько модифицировать программу,а именно, избавится от повторов в методах printAllSquares и deleteFigure.
в метод передать класс, объекты которого мы хотим посчитать.

что-то типа этого?

Java
1
2
3
4
 private void printSquare(Figure figure)
    {
        System.out.println(figure.getName()  + " .Square -  " + figure.getSquare());
    }
но тогда возник вопрос, а как вызвать метод? как передать ему в параметр созданную фигуру, а не figureType?

и еще, в методе countFigures использовать map?
ключ - класс или имя класса, и сколько фигура встречается

Java
1
2
private int countFigures(int type, Figure f) {
Map<Figure,Integer> map = new HashMap<Figure,Integer>(); }
покопалась в интернете, но так путного ничего и не нашла, может быть,плохо ищу?
0
69 / 69 / 39
Регистрация: 22.05.2014
Сообщений: 311
21.02.2015, 22:14
Цитата Сообщение от катринко Посмотреть сообщение
избавится от повторов в методах printAllSquares и deleteFigure.
дак площади считаются и фигуры удаляются только для определенного типа фигуры,
ну можно переделать на
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private boolean deleteFigure(int type) {
        Class c = null;
        if (type == 1) {
            c = Circle.class;
        } else if (type == 2) {
            c = Triangle.class;
        } else if (type == 3) {
            c = Square.class;
        } else if (type == 4) {
            c = Ellipse.class;
        }
 
        if (c != null)
 
        for (Figure figure : figures) {
                if (figure.getClass() == c) {
                    figures.remove(figure);
                    return true;
                }
        }
        return false;
    }
и там так само
0
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 17
21.02.2015, 22:43  [ТС]
Требование преподавателя. Так и не поняла, как убрать повторы, но сохранить расчеты в соответствии с меню,для разных типов фигур. ну ладно, будем пытаться, Вам все равно спасибо большое за отклик)
0
0 / 0 / 0
Регистрация: 08.04.2016
Сообщений: 1
08.04.2016, 23:14
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public abstract class Figure{
     
    float x; // x-координата точки
    float y; // y-координата точки
  
    public Figure(float x, float y){
         
        this.x=x;
        this.y=y;
    }
    // абстрактный метод для получения периметра
    public abstract float getPerimeter();
    // абстрактный метод для получения площади
    public abstract float getArea();
}
// производный класс прямоугольника
class Rectangle extends Figure
{
    private float width;
    private float height;
  
    // конструктор с обращением к конструктору класса Figure
    public Rectangle(float x, float y, float width, float height){
         
        super(x,y);
        this.width = width;
        this.height = height;
    }
     
    public float getPerimeter(){
         
        return width * 2 + height * 2;
    }
     
    public float getArea(){
         
        return width * height;
    }
}
Конкретно в этой программе ошибка куда и как написать public static void main(String args[]) и что писать внутри этого блока?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.04.2016, 23:14
Помогаю со студенческими работами здесь

Даны четыре вещественных числа x, y, x, y, представляющие собой координаты точек А и В. Плоскость разделяется надвое
Даны четыре вещественных числа x, y, x, y, представляющие собой координаты точек А и В. Плоскость разделяется надвое прямой x = y....

Даны вещественные числа A и R представляющие собой длину стороны квадрата и радиус круга на плоскости.
Даны вещественные числа A и R представляющие собой длину стороны квадрата и радиус круга на плоскости. Написать подпрограмму выводящую одно...

Создать класс box, конструктору которого передаются три значения double, представляющие собой длины сторон параллелепипеда
Создать класс box, конструктору которого передаются три значения double, пресдтавляющие собой длины сторон параллелепипеда. Класс box...

Найти в строке все слова, представляющие собой правильные записи дат в формате "dd/mm/yyyy"
Строка состоит из слов, разделенных одним или несколькими пробелами. Найти все слова, представляющие собой правильные записи дат в формате...

Геометрические фигуры
Доброго времени суток, господа. Возник вопрос. Подскажите, какие функции в с++ используются для рисования простейших геометрических фигур....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru