Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
 Аватар для Sma6nta
5 / 3 / 1
Регистрация: 12.05.2019
Сообщений: 201

Как передать массив в функцию и класс в объект?

23.05.2019, 12:59. Показов 3710. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача- треугольники у нас, заданы точками которые классы. Надо создать массив из них и вычислить какие из них какого вида и найти маx и min площади и периметры и посчитать каких сколько штук.

Строго без списков и хитрых комбинаций. У нас только 3е занятие(((

1. как задать координаты через класс? Класс есть. Координаты есть. Я не понимаю как вписать его в конструктор(
2. как правильно передать в функции массив из обьектов?

вторые сутки без отдыха война с ними и вот что у меня есть:

класс точка

Кликните здесь для просмотра всего текста
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
public class Point {
    private double x;
    private double y;
 
    public Point(int x, int y) {
        this.setX(x);
        this.setY(y);
    }
   
    public double getX() {
        return x;
    }
 
    public void setX(double x) {
        this.x = x;
    }
 
    public double getY() {
        return y;
    }
 
    public void setY(double y) {
        this.y = y;
    }
}




и класс сами треугольники
Кликните здесь для просмотра всего текста

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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
public class Triangle {
    private int x1, x2, x3, y1, y2, y3;
    private double sideA;
    private double sideB;
    private double sideC;
 
    public Triangle(int x1, int y1, int x2, int y2, int x3, int y3) {
        this.setX1(x1);
        this.setX2(x2);
        this.setX3(x3);
        this.setY1(y1);
        this.setY2(y2);
        this.setY3(y3);
 
        sideA = findSide(x1, x2, y1, y2);
        sideB = findSide(x2, x3, y2, y3);
        sideC = findSide(x1, x3, y1, y3);
 
    }
 
    double findSide(int x1, int x2, int y1, int y2) {
        double side = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
        return side;
 
    }
 
    public double perimetr() {
        double perimetr = getSideA() + getSideB() + getSideC();
        return perimetr;
    }
 
    public double sqare() {
        double a = getSideA();
        double b = getSideB();
        double c = getSideC();
        
        double sqare = Math.sqrt(perimetr()/2*(perimetr()/2-a)*(perimetr()/2-b)*(perimetr()/2-c));
        return sqare;
    }
 
    public boolean equilateral() { // ravnostoronniy
        if (getSideA() == getSideB() & getSideA() == getSideC()) {
            return true;
        } else
            return false;
    }
 
    public boolean isosceles() { // ravnobedrenniy
        if (getSideA() == getSideB() | getSideB() == getSideC()) {
            return true;
        } else
            return false;
    }
 
    public boolean rectangular() { // pramougolniy
        double a = getSideA();
        double b = getSideB();
        double c = getSideC();
        if ((a * a == b * b + c * c) | (b * b == a * a + b * b) | (c * c == a * a + b * b)) {
            return true;
        } else
            return false;
    }
 
    public boolean arbitrary() { // proizvolniy
        if (getSideA() != getSideB() & getSideB() != getSideC()) {
            return true;
        } else
            return false;
    }
 
    public void countMaxAndMinPerimetr() {
 
        for (int i = triangle.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
 
                if (triangle[j].perimetr > triangle[j + 1].perimetr) {
                    int tmp = triangle[j];
                    triangle[j] = triangle[j + 1];
                    arr[j + 1] = tmp;
                }
            }
            System.out.println("minPerimetr = " + triangle[0].perimetr);
            System.out.println("maxPerimetr = " + triangle[triangle.length].perimetr);
        }
    }
 
    public void countMaxAndMinSqare() {
 
        for (int i = triangle.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
 
                if (triangle[j].sqare > triangle[j + 1].sqare) {
                    int tmp = triangle[j];
                    triangle[j] = triangle[j + 1];
                    arr[j + 1] = tmp;
                }
            }
            System.out.println("min Sqare = " + triangle[0].sqare);
            System.out.println("max Sqare = " + triangle[triangle.length].sqare);
        }
    }
 
    public void diferentTypeTriangle() {
        int equilateral, isosceles, rectangular, arbitrary;
 
        for (int i = 0; i < triangle.length; i++) {
            if (triangle[i].equilateral)
                equilateral++;
            if (triangle[i].isosceles)
                isosceles++;
            if (triangle[i].rectangular)
                rectangular++;
            if (triangle[i].arbitrary)
                arbitrary++;
        }
        System.out.println("Count equilateral" + equilateral);
        System.out.println("Count isosceles" + isosceles);
        System.out.println("Count rectangular" + rectangular);
        System.out.println("Count arbitrary" + arbitrary);
 
    }
 
    public static void main(String[] args) {
 
        Triangle[] triangle = new Triangle[10];
 
        triangle[0] = new Triangle(15, 11, 18, 125, 17, 13);
        triangle[1] = new Triangle(4, 5, 8, 5, 1, 4);
        triangle[2] = new Triangle(10, 15, 8, 25, 7, 4);
        triangle[3] = new Triangle(6, 9, 8, 5, 5, 34);
        triangle[4] = new Triangle(8, 5, 8, 6, 7, 4);
        triangle[5] = new Triangle(4, 18, 8, 25, 3, 4);
        triangle[6] = new Triangle(3, 5, 8, 4, 7, 34);
        triangle[7] = new Triangle(2, 4, 8, 5, 4, 4);
        triangle[8] = new Triangle(6, 16, 8, 23, 7, 4);
        triangle[9] = new Triangle(5, 7, 8, 5, 39, 4);
 
        System.out.println(triangle.length);
 
    }
 
    public int getX1() {
        return x1;
    }
 
    public void setX1(int x1) {
        this.x1 = x1;
    }
 
    public int getX3() {
        return x3;
    }
 
    public void setX3(int x3) {
        this.x3 = x3;
    }
 
    public int getX2() {
        return x2;
    }
 
    public void setX2(int x2) {
        this.x2 = x2;
    }
 
    public double getSideA() {
        return sideA;
    }
 
    public void setSideA(double sideA) {
        this.sideA = sideA;
    }
 
    public double getSideC() {
        return sideC;
    }
 
    public void setSideC(double sideC) {
        this.sideC = sideC;
    }
 
    public double getSideB() {
        return sideB;
    }
 
    public void setSideB(double sideB) {
        this.sideB = sideB;
    }
 
    public int getY2() {
        return y2;
    }
 
    public void setY2(int y2) {
        this.y2 = y2;
    }
 
    public int getY3() {
        return y3;
    }
 
    public void setY3(int y3) {
        this.y3 = y3;
    }
 
    public int getY1() {
        return y1;
    }
 
    public void setY1(int y1) {
        this.y1 = y1;
    }
}


спасибо заранее
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2019, 12:59
Ответы с готовыми решениями:

Как передать в функцию двумерный массив указателей на класс?
у меня есть std::vector&lt;Monster*&gt; monsters; Rect *pole; int pacmen_distance; Monster и Rect два...

Недопустимый неполный тип , или как передать в функцию указатель на объект класса , или просто объект
Други мои , кодеры. Не могу я ни как передать в функцию объект класса , или что еще лучше(для меня , так как учусь работать с указателями)...

Как передать ссылку на объект в класс
Здравствуйте! Подскажите, пожалуйста, почему не работает: log.h class LogClass { public: bool InitializeLog(); void...

21
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
23.05.2019, 13:05
Цитата Сообщение от Sma6nta;1[quote="Sma6nta Посмотреть сообщение
public static void main(String[] args)
3594119"]private int x1, x2, x3, y1, y2, y3;[/quote]
зачем вот это, если у тебя есть класс точка?
Цитата Сообщение от Sma6nta Посмотреть сообщение
как задать координаты через класс? Класс есть. Координаты есть. Я не понимаю как вписать его в конструктор(
кого в какой конструктор вписать?
Цитата Сообщение от Sma6nta Посмотреть сообщение
2. как правильно передать в функции массив из обьектов?
Цитата Сообщение от Sma6nta Посмотреть сообщение
public static void main(String[] args)
так же

Добавлено через 37 секунд
код в тегах Java вставляй
1
 Аватар для Sma6nta
5 / 3 / 1
Регистрация: 12.05.2019
Сообщений: 201
23.05.2019, 13:16  [ТС]
вот так?
Java
1
triangle[0] = new Triangle(Point.point(15, 11),Point.point (18, 125),Point.point( 17, 13));
а как тогда должен кусок с конструктором выглядеть?

если можно на пальцах ибо я совсем зеленая(
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
23.05.2019, 13:21
Java
1
2
3
4
5
6
class Triangle {
  Point point1;
  Triangle(Point point1) {
    this.point1 = point1; 
  }
}
А вообще конструкторы умеет IDE генерировать
0
 Аватар для Sma6nta
5 / 3 / 1
Регистрация: 12.05.2019
Сообщений: 201
23.05.2019, 13:40  [ТС]
вставила это вместо моего конструктора.
но стороны то sideA ...BC....найти надо, вынесла их, а там x1....y1... не находит теперь .

и triangle[1] = new Triangle(Point.point(5, 11),Point.point (8, 25),Point.point( 17, 10));
не работает. нет такого метода пишет.
и какой массив передать в функции я не понимаю.

вот что у меня пока вышло
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
192
193
194
195
196
197
198
199
200
public class Triangle {
    private int x1, x2, x3, y1, y2, y3;
    private double sideA = findSide(x1, x2, y1, y2);
    private double sideB = findSide(x2, x3, y2, y3);;
    private double sideC = findSide(x1, x3, y1, y3);;
 
    double findSide(int x1, int x2, int y1, int y2) {
        double side = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
        return side;
 
    }
 
    public double perimetr() {
        double perimetr = getSideA() + getSideB() + getSideC();
        return perimetr;
    }
 
    public double sqare() {
        double a = getSideA();
        double b = getSideB();
        double c = getSideC();
 
        double sqare = Math.sqrt(perimetr() / 2 * (perimetr() / 2 - a) * (perimetr() / 2 - b) * (perimetr() / 2 - c));
        return sqare;
    }
 
    public boolean equilateral() { // ravnostoronniy
        if (getSideA() == getSideB() & getSideA() == getSideC()) {
            return true;
        } else
            return false;
    }
 
    public boolean isosceles() { // ravnobedrenniy
        if (getSideA() == getSideB() | getSideB() == getSideC()) {
            return true;
        } else
            return false;
    }
 
    public boolean rectangular() { // pramougolniy
        double a = getSideA();
        double b = getSideB();
        double c = getSideC();
        if ((a * a == b * b + c * c) | (b * b == a * a + b * b) | (c * c == a * a + b * b)) {
            return true;
        } else
            return false;
    }
 
    public boolean arbitrary() { // proizvolniy
        if (getSideA() != getSideB() & getSideB() != getSideC()) {
            return true;
        } else
            return false;
    }
 
    public void countMaxAndMinPerimetr() {
 
        for (int i = triangle.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
 
                if (triangle[j].perimetr > triangle[j + 1].perimetr) {
                    int tmp = triangle[j];
                    triangle[j] = triangle[j + 1];
                    arr[j + 1] = tmp;
                }
            }
            System.out.println("minPerimetr = " + triangle[0].perimetr);
            System.out.println("maxPerimetr = " + triangle[triangle.length].perimetr);
        }
    }
 
    public void countMaxAndMinSqare() {
 
        for (int i = triangle.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
 
                if (triangle[j].sqare > triangle[j + 1].sqare) {
                    int tmp = triangle[j];
                    triangle[j] = triangle[j + 1];
                    arr[j + 1] = tmp;
                }
            }
            System.out.println("min Sqare = " + triangle[0].sqare);
            System.out.println("max Sqare = " + triangle[triangle.length].sqare);
        }
    }
 
    public void diferentTypeTriangle() {
        int equilateral, isosceles, rectangular, arbitrary;
 
        for (int i = 0; i < triangle.length; i++) {
            if (triangle[i].equilateral)
                equilateral++;
            if (triangle[i].isosceles)
                isosceles++;
            if (triangle[i].rectangular)
                rectangular++;
            if (triangle[i].arbitrary)
                arbitrary++;
        }
        System.out.println("Count equilateral" + equilateral);
        System.out.println("Count isosceles" + isosceles);
        System.out.println("Count rectangular" + rectangular);
        System.out.println("Count arbitrary" + arbitrary);
 
    }
 
    public static void main(String[] args) {
 
        Triangle[] triangle = new Triangle[10];
 
        triangle[0] = new Triangle(15, 11, 3, 5, 7, 13);
        triangle[1] = new Triangle(Point.point(5, 11), Point.point(8, 25), Point.point(17, 10));
        triangle[2] = new Triangle(Point.point(10, 6), Point.point(7, 5), Point.point(7, 13));
        triangle[3] = new Triangle(Point.point(15, 11), Point.point(6, 5), Point.point(1, 11));
        triangle[4] = new Triangle(Point.point(20, 5), Point.point(18, 25), Point.point(7, 13));
        triangle[5] = new Triangle(Point.point(15, 11), Point.point(5, 15), Point.point(17, 8));
        triangle[6] = new Triangle(Point.point(1, 5), Point.point(18, 25), Point.point(7, 3));
        triangle[7] = new Triangle(Point.point(15, 11), Point.point(1, 15), Point.point(16, 17));
        triangle[8] = new Triangle(Point.point(3, 4), Point.point(8, 15), Point.point(7, 13));
        triangle[9] = new Triangle(Point.point(15, 11), Point.point(18, 15), Point.point(17, 8));
 
        System.out.println(triangle.length);
 
    }
 
    public int getX1() {
        return x1;
    }
 
    public void setX1(int x1) {
        this.x1 = x1;
    }
 
    public int getX3() {
        return x3;
    }
 
    public void setX3(int x3) {
        this.x3 = x3;
    }
 
    public int getX2() {
        return x2;
    }
 
    public void setX2(int x2) {
        this.x2 = x2;
    }
 
    public double getSideA() {
        return sideA;
    }
 
    public void setSideA(double sideA) {
        this.sideA = sideA;
    }
 
    public double getSideC() {
        return sideC;
    }
 
    public void setSideC(double sideC) {
        this.sideC = sideC;
    }
 
    public double getSideB() {
        return sideB;
    }
 
    public void setSideB(double sideB) {
        this.sideB = sideB;
    }
 
    public int getY2() {
        return y2;
    }
 
    public void setY2(int y2) {
        this.y2 = y2;
    }
 
    public int getY3() {
        return y3;
    }
 
    public void setY3(int y3) {
        this.y3 = y3;
    }
 
    public int getY1() {
        return y1;
    }
 
    public void setY1(int y1) {
        this.y1 = y1;
    }
}
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
23.05.2019, 14:02
проблема в том, что ты не понимаешь, что делаешь, надо подумать, понять, что написано, а потом делать
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
23.05.2019, 14:22
Лучший ответ Сообщение было отмечено Sma6nta как решение

Решение

Point
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
package me.triangles;
 
import java.util.Random;
 
public class Point {
    private double x;
    private double y;
 
    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }
 
    public double getX() {
        return x;
    }
 
    public void setX(double x) {
        this.x = x;
    }
 
    public double getY() {
        return y;
    }
 
    public void setY(double y) {
        this.y = y;
    }
    
    public static Point getRandomPoint() {
        Random rand = new Random();
        return new Point(rand.nextDouble(), rand.nextDouble());
    }
}
Triangle
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
package me.triangles;
 
public class Triangle {
    private Point A, B, C;
    private double AB, BC, AC;
 
    public Triangle(Point A, Point B, Point C) {
        this.A = A;
        this.B = B;
        this.C = C;
 
        AB = findSide(A, B);
        BC = findSide(B, C);
        AC = findSide(A, C);
    }
 
    public double findSide(Point first, Point second) {
        return Math.sqrt((second.getX() - first.getX()) * (second.getX() - first.getX())
                + (second.getY() - first.getY()) * (second.getY() - first.getY()));
    }
 
    public double getPerimetr() {
        return AB + BC + AC;
    }
 
    public double getSquare() {
        return Math.sqrt(getPerimetr()/2*(getPerimetr()/2-AB)*(getPerimetr()/2-BC)*(getPerimetr()/2-AC));
    }
 
    public boolean isEquilateral() { // ravnostoronniy
        return Double.compare(AB, BC) == 0 && Double.compare(BC, AC) == 0;
    }
 
    public boolean isIsosceles() { // ravnobedrenniy
        return !isEquilateral() && (Double.compare(AB, BC) == 0 || Double.compare(BC, AC) == 0);
    }
 
    public boolean isRectangular() { // pramougolniy
        return (AB * AB == BC * BC + AC * AC) || (BC * BC == AB * AB + BC * BC) || (AC * AC == AB * AB + BC * BC);
    }
 
    public boolean isArbitrary() { // proizvolniy
        return AB != BC && BC != AC;
    }
 
    public Point getA() {
        return A;
    }
 
    public void setA(Point p) {
        A = p;
    }
 
    public Point getB() {
        return B;
    }
 
    public void setB(Point p) {
        B = p;
    }
 
    public Point getC() {
        return C;
    }
 
    public void setC(Point p) {
        C = p;
    }
 
    public double getSideAB() {
        return AB;
    }
    
    public double getSideBC() {
        return BC;
    }
    
    public double getSideAC() {
        return AC;
    }
 
    public void setSideAB(Point first, Point second) {
        AB = findSide(first, second);
    }
 
    public void setSideBC(Point first, Point second) {
        BC = findSide(first, second);
    }
 
    public void setSideAC(Point first, Point second) {
        AC = findSide(first, second);
    }
}
Main
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
import me.triangles.Point;
import me.triangles.Triangle;
 
public class TriangleTest {
    public static void main(String[] args) {
        Triangle[] triangles = new Triangle[10];
        for (int i = 0; i < triangles.length; i++)
            triangles[i] = new Triangle(Point.getRandomPoint(), Point.getRandomPoint(), Point.getRandomPoint());
        
        double[] minMaxP = countMaxAndMinPerimetr(triangles);
        System.out.printf("minPerimetr=%.2f\n", minMaxP[0]);
        System.out.printf("maxPerimetr=%.2f\n\n",minMaxP[1]);
        
        double[] minMaxS = countMaxAndMinSqare(triangles);
        System.out.printf("minSquare=%.2f\n", minMaxS[0]);
        System.out.printf("maxSquare=%.2f\n\n",minMaxS[1]);
        
        int[] typesCount = countDifferentTriangleType(triangles);
        System.out.println("equilateral=" + typesCount[0]);
        System.out.println("isosceles=" + typesCount[1]);
        System.out.println("rectangular=" + typesCount[2]);
        System.out.println("arbitrary=" + typesCount[3]);
    }
    
    public static double[] countMaxAndMinPerimetr(Triangle[] triangles) {
        double min = Double.MAX_VALUE;
        double max = Double.MIN_VALUE;
        
        for (Triangle triangle : triangles) {
            if (triangle.getPerimetr() > max)
                max = triangle.getPerimetr();
            if (triangle.getPerimetr() < min)
                min = triangle.getPerimetr();
        }
        
        return new double[] { min, max };
    }
    
    public static double[] countMaxAndMinSqare(Triangle[] triangles) {
        double min = Double.MAX_VALUE;
        double max = Double.MIN_VALUE;
        
        for (Triangle triangle : triangles) {
            if (triangle.getSquare() > max)
                max = triangle.getSquare();
            if (triangle.getSquare() < min)
                min = triangle.getSquare();
        }
        
        return new double[] { min, max };
    }
    
    public static int[] countDifferentTriangleType(Triangle[] triangles) {
        int equilateral = 0;
        int isosceles = 0;
        int rectangular = 0;
        int arbitrary = 0;
        
        for (Triangle triangle : triangles) {
            if (triangle.isEquilateral())
                equilateral++;
            if (triangle.isIsosceles())
                isosceles++;
            if (triangle.isRectangular())
                rectangular++;
            if (triangle.isArbitrary())
                arbitrary++;
        }
        
        return new int[] { equilateral, isosceles, rectangular, arbitrary };
    }
}
Если запустите в таком виде, какой есть, то все треугольники будут произвольными, ибо значения генерируются случайным образом и шанс того, что будет другой тип треугольника, чрезвычайно мал. Метод getRandomPoint в классе Point можете убрать, я добавил его просто для теста

Добавлено через 15 минут
Также вам следует знать следующее: если метод выполняет какую-то проверку и должен возвращать значение типа boolean, то он обычно начинается со слова is, например isTriangle. Также & и | — это битовые операции. Я уверен, что вы хотели использовать операторы && (и), || (или). Ещё у вас есть два метода: первый проверяет является ли треугольник равносторонним, второй — равнобедренным, но вы же понимаете, что если треугольник равносторонний, то он при том и равнобедренный, поэтому в методе isIsosceles нужно добавить дополнительное условие (я это сделал)
1
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
23.05.2019, 14:41
много лишнего
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
public class Triangle {
    private Point a;
    private Point b;
    private Point c;
    private Type type;
 
    public Triangle(int ax, int ay, int bx, int by, int cx, int cy) {
        this(new Point(ax, ay), new Point(bx, by), new Point(cx, cy));
    }
 
    public Triangle(Point a, Point b, Point c) {
        this.a = a;
        this.b = b;
        this.c = c;
 
        if (rectangular()) {
            type = Type.RECTANGULAR;
        } else if (isosceles()) {
            type = Type.ISOSCELES;
        } else if (equilateral()) {
            type = Type.EQUILATERAL;
        } else {
            type = Type.ARBITRARY;
        }
    }
 
    public static void main(String[] args) {
 
        Triangle[] triangles = new Triangle[10];
 
        triangles[0] = new Triangle(15, 11, 3, 5, 7, 13);
        triangles[1] = new Triangle(5, 118, 25, 17, 10, 11);
        triangles[2] = new Triangle(10, 6, 7, 5, 7, 13);
        triangles[3] = new Triangle(15, 11, 6, 5, 1, 11);
        triangles[4] = new Triangle(20, 5, 18, 25, 7, 13);
        triangles[5] = new Triangle(15, 11, 5, 15, 17, 8);
        triangles[6] = new Triangle(1, 5, 18, 25, 7, 3);
        triangles[7] = new Triangle(15, 11, 1, 15, 16, 17);
        triangles[8] = new Triangle(3, 4, 8, 15, 7, 13);
        triangles[9] = new Triangle(15, 11, 18, 15, 17, 8);
 
        System.out.println(diferentTypeTriangle(triangles));
 
    }
 
    public static Optional<Triangle> findMaxPerimetrTriangle(Triangle[] trianlges) {
        return Stream.of(trianlges).max(comparingDouble(Triangle::perimetr));
    }
 
    public static Optional<Triangle> findMinPerimetrTriangle(Triangle[] trianlges) {
        return Stream.of(trianlges).min(comparingDouble(Triangle::perimetr));
    }
 
    public static Optional<Triangle> findMaxSquareTriangle(Triangle[] trianlges) {
        return Stream.of(trianlges).max(comparingDouble(Triangle::square));
    }
 
    public static Optional<Triangle> findMinSquareTriangle(Triangle[] trianlges) {
        return Stream.of(trianlges).min(comparingDouble(Triangle::square));
    }
 
    public double sideA() {
        return findSide(a, b);
    }
 
    public double sideB() {
        return findSide(b, c);
    }
 
    public double sideC() {
        return findSide(c, a);
    }
 
    private double findSide(Point p1, Point p2) {
        return Math.sqrt(pow((p2.x - p1.x), 2) + pow((p2.y - p1.y), 2));
    }
 
    public double perimetr() {
        return sideA() + sideB() + sideC();
    }
 
    public double square() {
        return (a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y)) / 2.0;
    }
 
    private boolean equilateral() {
        return sideA() == sideB() && sideA() == sideC();
    }
 
    private boolean isosceles() {
        return !equilateral() && (sideA() == sideB() || sideB() == sideC() || sideA() == sideC());
    }
 
    private boolean rectangular() {
        return (pow(sideA(), 2) == pow(sideB(), 2) + pow(sideC(), 2))
                || (pow(sideB(), 2) == pow(sideA(), 2) + pow(sideC(), 2))
                || (pow(sideC(), 2) == pow(sideA(), 2) + pow(sideC(), 2));
    }
 
    public static Map<Type, Long> diferentTypeTriangle(Triangle[] triangles) {
        return Arrays.stream(triangles).collect(groupingBy(triangle -> triangle.type, counting()));
    }
 
    public enum Type {
        EQUILATERAL,
        ISOSCELES,
        RECTANGULAR,
        ARBITRARY;
    }
 
    public static class Point {
        public final int x;
        public final int y;
 
        private Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
}
1
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
23.05.2019, 15:00
xoraxax, ну, насчёт типов я прокололся, согласен, но в остальном-то всё норм, ибо просили
Цитата Сообщение от Sma6nta Посмотреть сообщение
Строго без списков и хитрых комбинаций. У нас только 3е занятие(((
А у вас там stream, обобщённые типы, отображения, лямбда-выражения
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
23.05.2019, 15:20
Цитата Сообщение от Gungala Посмотреть сообщение
А у вас там stream, обобщённые типы, отображения, лямбда-выражения
нормально, пусть к хорошему привыкают
0
 Аватар для Sma6nta
5 / 3 / 1
Регистрация: 12.05.2019
Сообщений: 201
23.05.2019, 16:22  [ТС]
Gungala спасибо огромное. Очень красиво)
и даже все понятно на моем уровне.

остался один последний вопрос
заполнение triangles у меня теперь выглядит так
Java
1
triangles[4] = new Triangle(Point.point(8, 5), Point.point(8, 6), Point.point(7, 4));
(да?)

рандом я убрала
а как выглядиt Point.point() ?
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
23.05.2019, 16:29
Лучший ответ Сообщение было отмечено Sma6nta как решение

Решение

Sma6nta, вы должны понять, что объект любого класса, если он создаётся через конструктор (а в вашем случае это именно так), имеет следующий вид:
Java
1
Class classObject = new Class(Parameter1, parameter2);
Поэтому Point создаётся так:
Java
1
Point point = new Point(10, 10);
И Triangle будет создаваться следующим образом:
если вы заранее не создали объекты класса Point
Java
1
triangles[i] = new Triangle(new Point(8, 5), new Point(8,6), new Point(7, 4));
если у вас уже есть три объекта класса Point
Java
1
2
3
4
5
Point point1 = new Point(10, 10);
Point point2 = new Point(12, 14);
Point point3 = new Point(9, 15);
 
triangles[i] = new Triangle(point1, point2, point3);
1
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
23.05.2019, 16:36
так то бы еще надо проверить, что точки не лежат на одной прямой

Добавлено через 4 минуты
Цитата Сообщение от Gungala Посмотреть сообщение
double max = Double.MIN_VALUE;
посмотри, что в константе лежит
0
 Аватар для Sma6nta
5 / 3 / 1
Регистрация: 12.05.2019
Сообщений: 201
23.05.2019, 16:49  [ТС]
Gungala спасибо тебе добрый человек.

А в те константы я нули положила. мы еще таких хитрых даблов не учили.
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
23.05.2019, 17:02
xoraxax,
Цитата Сообщение от xoraxax Посмотреть сообщение
посмотри, что в константе лежит
Посмотрел. Что не так?

Добавлено через 7 минут
Sma6nta, рад был помочь
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
23.05.2019, 17:08
Цитата Сообщение от Gungala Посмотреть сообщение
Что не так?
плохо, что не видишь
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
23.05.2019, 17:28
xoraxax, ну объясните, пожалуйста
Не оставляйте в неведении

Добавлено через 18 минут
xoraxax, если вы о том, что оно положительное, то периметр треугольника всё равно ж будет положительным числом

Добавлено через 18 секунд
если не это, то я вообще без понятия
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
23.05.2019, 17:49
Gungala, Мне понравился и твой код а потом и xoraxax, (именно в таком порядке я их посмотрел, но кто я чтобы судить?!).
Присмотревшись к замечанию (возможно сути которого я не понял) мне становится не понятно вообще мин. и макс. значения.
Кроме того что мне непонятно логика : учитывать "практически нули", учитывать "практически безконечность", я боюсь что ситуация "если число больше чем максимально возможное то ЕЩЕ ДОБАВИТЬ, а если число неотрицательное и меньше ПОГРЕШНОСТИ то ЕЩЕ УТОЧНИТЬ" выглядит не достижимой а если и достижимой вначале countMaxAndMinPerimetr и countMaxAndMinSqare то возможно исключение после.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
23.05.2019, 18:06
Gungala, несмотря на то, что код будет работать, потому что такие данные, он нелогичен. А это плохо.
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
23.05.2019, 19:54
xoraxax, я чёт не понимаю почему он нелогичен. Мы берём минимальное значение, которое только может быть, если встречается какое-либо число, большее чем оно, мы его заменяем и так далее. Таким образом находится максимальное значение в массиве, аналогично с минимальным. На мой взгляд логичнее некуда. К тому же, я не сам это придумал, Хорстман в своей книге использовал этот метод, правда, я не уверен, что именно с double, но не суть

ViktorFX, там нигде ничего не прибавляется, только заменяются значения. Описанная вами ситуация невозможна, ибо сравниваются два числа типа double, одно из которых является макисмальным для этого типа, т.е. второе просто по определению не может быть больше (либо меньше, если речь идёт о минимальном значении). Исключение никаким образом не вылетит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.05.2019, 19:54
Помогаю со студенческими работами здесь

Как из main передать объект в класс
В классе main я создал объект класса Company public class Main { public static void main(String args) { Company...

Как передать объект в функцию
Допустим у меня есть такой класс: class Abc { private: int a; public: void set_a(int A) { a = A;

Как передать ссылку на объект в функцию
Есть два класса допустим Entitit и Map, в Map есть переменная допустим Time которая изменяется каждую секунду на +1, требуется передать...

Как передать объект с формы на форму (из класса в класс)?
Всем привет. Сижу мучаюсь, сейчас пойду в книжках ответ искать. На форме 1 по клику открывается, через диалог, форма 2. На форме 2...

Как правильно передать объект fstream в функцию
При использовании следующего подхода возникают вопросы: int myFunc(fstream&amp; data); 1. Если я открою поток из функции, можно ли его...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru