Skip to content

Commit 9dae389

Browse files
satyabarghavvil02
andauthored
Herons : Changed the signature of the function (TheAlgorithms#4686)
* Made changes to the code to correct the Logic of Armstrong Number * Resolved the issues * Trying to resolve the Linter error by changing Variable name * Changed Variable Names : trying to resolve Clang error * Chnged the signature of the function * Added the Function documentation * Added exception for parameters * Resolved with suggested changes * Resolved with Suggested changes * fix: use proper logic --------- Co-authored-by: vil02 <vil02@o2.pl>
1 parent e87036d commit 9dae389

File tree

2 files changed

+42
-13
lines changed

2 files changed

+42
-13
lines changed
Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,35 @@
11
package com.thealgorithms.maths;
22

33
/**
4+
* Wikipedia for HeronsFormula => https://en.wikipedia.org/wiki/Heron%27s_formula
45
* Find the area of a triangle using only side lengths
56
*/
67

7-
public class HeronsFormula {
8+
public final class HeronsFormula {
89

9-
public static double Herons(int s1, int s2, int s3) {
10-
double a = s1;
11-
double b = s2;
12-
double c = s3;
13-
double s = (a + b + c) / 2.0;
14-
double area = 0;
15-
area = Math.sqrt((s) * (s - a) * (s - b) * (s - c));
16-
return area;
10+
/*
11+
* A function to get the Area of a Triangle using Heron's Formula
12+
* @param s1,s2,s3 => the three sides of the Triangle
13+
* @return area using the formula (√(s(s – s1)(s – s2)(s – s3)))
14+
* here s is called semi-perimeter and it is the half of the perimeter (i.e; s = (s1+s2+s3)/2)
15+
* @author satyabarghav
16+
*/
17+
private HeronsFormula() {
18+
}
19+
20+
private static boolean areAllSidesPositive(final double a, final double b, final double c) {
21+
return a > 0 && b > 0 && c > 0;
22+
}
23+
24+
private static boolean canFormTriangle(final double a, final double b, final double c) {
25+
return a + b > c && b + c > a && c + a > b;
26+
}
27+
28+
public static double herons(final double a, final double b, final double c) {
29+
if (!areAllSidesPositive(a, b, c) || !canFormTriangle(a, b, c)) {
30+
throw new IllegalArgumentException("Triangle can't be formed with the given side lengths");
31+
}
32+
final double s = (a + b + c) / 2.0;
33+
return Math.sqrt((s) * (s - a) * (s - b) * (s - c));
1734
}
1835
}

src/test/java/com/thealgorithms/maths/HeronsFormulaTest.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,33 @@ public class HeronsFormulaTest {
77

88
@Test
99
void test1() {
10-
Assertions.assertEquals(HeronsFormula.Herons(3, 4, 5), 6.0);
10+
Assertions.assertEquals(HeronsFormula.herons(3, 4, 5), 6.0);
1111
}
1212

1313
@Test
1414
void test2() {
15-
Assertions.assertEquals(HeronsFormula.Herons(24, 30, 18), 216.0);
15+
Assertions.assertEquals(HeronsFormula.herons(24, 30, 18), 216.0);
1616
}
1717

1818
@Test
1919
void test3() {
20-
Assertions.assertEquals(HeronsFormula.Herons(1, 1, 1), 0.4330127018922193);
20+
Assertions.assertEquals(HeronsFormula.herons(1, 1, 1), 0.4330127018922193);
2121
}
2222

2323
@Test
2424
void test4() {
25-
Assertions.assertEquals(HeronsFormula.Herons(4, 5, 8), 8.181534085976786);
25+
Assertions.assertEquals(HeronsFormula.herons(4, 5, 8), 8.181534085976786);
26+
}
27+
28+
@Test
29+
public void testCalculateAreaWithInvalidInput() {
30+
Assertions.assertThrows(IllegalArgumentException.class, () -> { HeronsFormula.herons(1, 2, 3); });
31+
Assertions.assertThrows(IllegalArgumentException.class, () -> { HeronsFormula.herons(2, 1, 3); });
32+
Assertions.assertThrows(IllegalArgumentException.class, () -> { HeronsFormula.herons(3, 2, 1); });
33+
Assertions.assertThrows(IllegalArgumentException.class, () -> { HeronsFormula.herons(1, 3, 2); });
34+
35+
Assertions.assertThrows(IllegalArgumentException.class, () -> { HeronsFormula.herons(1, 1, 0); });
36+
Assertions.assertThrows(IllegalArgumentException.class, () -> { HeronsFormula.herons(1, 0, 1); });
37+
Assertions.assertThrows(IllegalArgumentException.class, () -> { HeronsFormula.herons(0, 1, 1); });
2638
}
2739
}

0 commit comments

Comments
 (0)