diff --git a/.idea/sonarlint/issuestore/0/4/049f0b24e772ebc1c8ef9efea30af249dcd17f2d b/.idea/sonarlint/issuestore/0/4/049f0b24e772ebc1c8ef9efea30af249dcd17f2d new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/1/8/182a7139b41088e341d4d4c03fe504d38212f07a b/.idea/sonarlint/issuestore/1/8/182a7139b41088e341d4d4c03fe504d38212f07a new file mode 100644 index 0000000..7d31fea --- /dev/null +++ b/.idea/sonarlint/issuestore/1/8/182a7139b41088e341d4d4c03fe504d38212f07a @@ -0,0 +1,3 @@ + +0 +java:S1220""Move this file to a named package. \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec b/.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/8/6/863e0292fd7e9b3e74dafd6cc01f73ba76346482 b/.idea/sonarlint/issuestore/8/6/863e0292fd7e9b3e74dafd6cc01f73ba76346482 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/a/5/a5cc2925ca8258af241be7e5b0381edf30266302 b/.idea/sonarlint/issuestore/a/5/a5cc2925ca8258af241be7e5b0381edf30266302 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/a/a/aa5702cba4e0d9184bb514f1a1b1658d911fd954 b/.idea/sonarlint/issuestore/a/a/aa5702cba4e0d9184bb514f1a1b1658d911fd954 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/b/3/b3e0015b2c421caafde69d12555418e3412929b5 b/.idea/sonarlint/issuestore/b/3/b3e0015b2c421caafde69d12555418e3412929b5 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/c/b/cba8b0ba30c39d2c2da03eb31d94de7a0f4a6ef1 b/.idea/sonarlint/issuestore/c/b/cba8b0ba30c39d2c2da03eb31d94de7a0f4a6ef1 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/d/1/d16c1bef6b09fd81b137e349df07a18d5f598c2d b/.idea/sonarlint/issuestore/d/1/d16c1bef6b09fd81b137e349df07a18d5f598c2d new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/d/b/db347cb861031495b000828d1ffcb7587fb526c9 b/.idea/sonarlint/issuestore/d/b/db347cb861031495b000828d1ffcb7587fb526c9 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/f/8/f8deec5ca82345ca43d398f91de01e4a379ce264 b/.idea/sonarlint/issuestore/f/8/f8deec5ca82345ca43d398f91de01e4a379ce264 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb index b0aa4ec..e69de29 100644 --- a/.idea/sonarlint/issuestore/index.pb +++ b/.idea/sonarlint/issuestore/index.pb @@ -1,24 +0,0 @@ - -9 - README.md,8\e\8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d -[ -+src/main/java/time/MonthDaysCalculator.java,a\a\aa5702cba4e0d9184bb514f1a1b1658d911fd954 -Q -!src/main/java/time/MonthType.java,d\b\db347cb861031495b000828d1ffcb7587fb526c9 -_ -/src/test/java/time/MonthDaysCalculatorTest.java,d\1\d16c1bef6b09fd81b137e349df07a18d5f598c2d -7 -pom.xml,4\4\442292b8a7efeabbe4cc176709b833b1792140ec -M -src/test/java/MedianTest.java,0\4\049f0b24e772ebc1c8ef9efea30af249dcd17f2d -I -src/main/java/Median.java,1\8\182a7139b41088e341d4d4c03fe504d38212f07a -: - -.gitignore,a\5\a5cc2925ca8258af241be7e5b0381edf30266302 -w -G.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec,8\6\863e0292fd7e9b3e74dafd6cc01f73ba76346482 -Z -*src/test/java/providers/MonthProvider.java,c\b\cba8b0ba30c39d2c2da03eb31d94de7a0f4a6ef1 -U -%src/test/java/time/MonthProvider.java,f\8\f8deec5ca82345ca43d398f91de01e4a379ce264 \ No newline at end of file diff --git a/.idea/sonarlint/securityhotspotstore/0/4/049f0b24e772ebc1c8ef9efea30af249dcd17f2d b/.idea/sonarlint/securityhotspotstore/0/4/049f0b24e772ebc1c8ef9efea30af249dcd17f2d new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/1/8/182a7139b41088e341d4d4c03fe504d38212f07a b/.idea/sonarlint/securityhotspotstore/1/8/182a7139b41088e341d4d4c03fe504d38212f07a new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec b/.idea/sonarlint/securityhotspotstore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/8/6/863e0292fd7e9b3e74dafd6cc01f73ba76346482 b/.idea/sonarlint/securityhotspotstore/8/6/863e0292fd7e9b3e74dafd6cc01f73ba76346482 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/a/5/a5cc2925ca8258af241be7e5b0381edf30266302 b/.idea/sonarlint/securityhotspotstore/a/5/a5cc2925ca8258af241be7e5b0381edf30266302 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/a/a/aa5702cba4e0d9184bb514f1a1b1658d911fd954 b/.idea/sonarlint/securityhotspotstore/a/a/aa5702cba4e0d9184bb514f1a1b1658d911fd954 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/b/3/b3e0015b2c421caafde69d12555418e3412929b5 b/.idea/sonarlint/securityhotspotstore/b/3/b3e0015b2c421caafde69d12555418e3412929b5 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/c/b/cba8b0ba30c39d2c2da03eb31d94de7a0f4a6ef1 b/.idea/sonarlint/securityhotspotstore/c/b/cba8b0ba30c39d2c2da03eb31d94de7a0f4a6ef1 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/d/1/d16c1bef6b09fd81b137e349df07a18d5f598c2d b/.idea/sonarlint/securityhotspotstore/d/1/d16c1bef6b09fd81b137e349df07a18d5f598c2d new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/d/b/db347cb861031495b000828d1ffcb7587fb526c9 b/.idea/sonarlint/securityhotspotstore/d/b/db347cb861031495b000828d1ffcb7587fb526c9 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/f/8/f8deec5ca82345ca43d398f91de01e4a379ce264 b/.idea/sonarlint/securityhotspotstore/f/8/f8deec5ca82345ca43d398f91de01e4a379ce264 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/index.pb b/.idea/sonarlint/securityhotspotstore/index.pb index b0aa4ec..e69de29 100644 --- a/.idea/sonarlint/securityhotspotstore/index.pb +++ b/.idea/sonarlint/securityhotspotstore/index.pb @@ -1,24 +0,0 @@ - -9 - README.md,8\e\8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d -[ -+src/main/java/time/MonthDaysCalculator.java,a\a\aa5702cba4e0d9184bb514f1a1b1658d911fd954 -Q -!src/main/java/time/MonthType.java,d\b\db347cb861031495b000828d1ffcb7587fb526c9 -_ -/src/test/java/time/MonthDaysCalculatorTest.java,d\1\d16c1bef6b09fd81b137e349df07a18d5f598c2d -7 -pom.xml,4\4\442292b8a7efeabbe4cc176709b833b1792140ec -M -src/test/java/MedianTest.java,0\4\049f0b24e772ebc1c8ef9efea30af249dcd17f2d -I -src/main/java/Median.java,1\8\182a7139b41088e341d4d4c03fe504d38212f07a -: - -.gitignore,a\5\a5cc2925ca8258af241be7e5b0381edf30266302 -w -G.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec,8\6\863e0292fd7e9b3e74dafd6cc01f73ba76346482 -Z -*src/test/java/providers/MonthProvider.java,c\b\cba8b0ba30c39d2c2da03eb31d94de7a0f4a6ef1 -U -%src/test/java/time/MonthProvider.java,f\8\f8deec5ca82345ca43d398f91de01e4a379ce264 \ No newline at end of file diff --git a/src/main/java/Median.java b/src/main/java/Median.java index 0c4db88..dc29301 100644 --- a/src/main/java/Median.java +++ b/src/main/java/Median.java @@ -1,10 +1,33 @@ /* Написать метод, который принимает на вход массив целых чисел и возвращает медиану (серединное значение) + + Медианой называется число, стоящее в упорядоченном ряде чисел посередине. + Например, в ряду: 1, 2, 3, 7, 9 — тройка является медианой. Если количество чисел чётное, + то за медиану принимают среднее двух стоящих в центре чисел. + Либо можно выбирать элемент под номером k/2, если k чётное и (k+1)/2, если нечетное. */ +import java.util.Arrays; + public class Median { public int median(int[] numbers){ + if (numbers == null) { + return Integer.MAX_VALUE; + } + if (numbers.length == 0){ + return Integer.MIN_VALUE; + } else { + Arrays.sort(numbers); + int median; + if (numbers.length % 2 == 0) { + int middleIndex = numbers.length / 2; + median = (numbers[middleIndex] + numbers[middleIndex - 1]) /2; + } else { + int middleIndex = numbers.length / 2; + median = numbers[middleIndex]; + } + return median; + } - return 1; } } diff --git a/src/test/java/DataNumbersProvider.java b/src/test/java/DataNumbersProvider.java new file mode 100644 index 0000000..bc3c172 --- /dev/null +++ b/src/test/java/DataNumbersProvider.java @@ -0,0 +1,43 @@ +import org.testng.annotations.DataProvider; + +public class DataNumbersProvider { + + @DataProvider(name = "validNumberArrayProvider") + public Object[][] validNumberArrayProvider() { + return new Object[][]{ + {new int[]{1, 2, 3, 4}, 2.5}, + {new int[]{-1, -2, -3, -4}, -2.5}, + {new int[]{1, 3, 5}, 3.0}, + {new int[]{5, 3, 2}, 3.0}, + {new int[]{1, 2, 3, 4, 5, 6}, 3.5}, + {new int[]{6, 5, 4, 3, 2, 1}, 3.5}, + {new int[]{3, 1, 4, 1, 5, 9}, 3.5}, + {new int[]{3, 1, 4, 1, 5}, 3.0}, + {new int[]{-1, -2, -3, -4, -5}, -3.0}, + {new int[]{2147483647, 2147483647, 2147483647, 2147483647}, 2147483647}, + {new int[]{2147483647, 2147483647, 2147483647}, 2147483647}, + {new int[]{2147483647}, 2147483647}, + {new int[]{20, 18, 16, 14, 12, 10, 8, 6, 4, 2}, 11.0}, + {new int[]{1000000, 2000000, 3000001, 4000000, 5000000}, 3000001.0}, + }; + } + + @DataProvider(name = "invalidNumberArrayProvider") + public Object[][] invalidNumberArrayProvider() { + return new Object[][]{ + {null, 0x80000000}, + {new int[]{}, 0x80000000}, + }; + } + + @DataProvider(name = "singleElementArrayProvider") + public Object[][] singleElementArrayProvider() { + return new Object[][]{ + {new int[]{0}, 0.0}, + {new int[]{1}, 1.0}, + {new int[]{2}, 2.0}, + {new int[]{5}, 5.0}, + {new int[]{-5}, -5.0}, + }; + } +} diff --git a/src/test/java/MedianTest.java b/src/test/java/MedianTest.java index 9fda0f1..870190b 100644 --- a/src/test/java/MedianTest.java +++ b/src/test/java/MedianTest.java @@ -1,7 +1,43 @@ +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import static org.testng.AssertJUnit.assertEquals; + public class MedianTest { + + private Median median; + @BeforeClass + public void beforeClass() { + median = new Median(); + } + @Test public void testMedianHN() { } + + @Test(dataProvider = "validNumberArrayProvider", + dataProviderClass = DataNumbersProvider.class) + public void testFindMedianValidNumberArrayProvider(int[] input, double expected) { + double actual = median.median(input); + assertEquals(expected, actual); + } + @Test(dataProvider = "validNumberArrayProvider", + dataProviderClass = DataNumbersProvider.class) + public void testFindMedianValidNumberArrayProviderQuickSelect(int[] input, double expected) { + double actual = median.median(input); + assertEquals(expected, actual); + } + @Test(dataProvider = "invalidNumberArrayProvider", + dataProviderClass = DataNumbersProvider.class) + public void testCalculateMedianWithInvalidInput(int[] numbers, double expected) { + double actual = median.median(numbers); + assertEquals(expected, actual); + } + + @Test(dataProvider = "singleElementArrayProvider", + dataProviderClass = DataNumbersProvider.class) + public void testFindMedianValidNumberArrayProviderWithSingleElementArrayProvider(int[] input, double expected) { + double actual = median.median(input); + assertEquals(actual, expected); + } }