## The challenge

You might know some pretty large perfect squares. But what about the NEXT one?

Complete the `findNextSquare` method that finds the next integral perfect square after the one passed as a parameter. Recall that an integral perfect square is an integer n such that sqrt(n) is also an integer.

If the parameter is itself not a perfect square then `-1` should be returned. You may assume the parameter is non-negative.

Examples:(Input –> Output)

 ``````1 2 3 `````` ``````121 --> 144 625 --> 676 114 --> -1 since 114 is not a perfect square ``````

## The solution in Java code

Option 1:

 ``````1 2 3 4 5 6 `````` ``````public class NumberFun { public static long findNextSquare(long sq) { long root = (long) Math.sqrt(sq); return root * root == sq ? (root + 1) * (root + 1) : -1; } } ``````

Option 2:

 ``````1 2 3 4 5 6 7 8 9 `````` ``````public class NumberFun { public static long findNextSquare(long sq) { long result; double d = Math.sqrt(sq); if ( d % 1 == 0) result = (long) Math.pow(++d, 2); else result = -1; return result; } } ``````

Option 3:

 ``````1 2 3 4 5 6 `````` ``````public class NumberFun { public static long findNextSquare(long sq) { Double side = Math.sqrt(sq); return (side % 1 > 0) ? -1 : (long) Math.pow(side + 1, 2); } } ``````

## Test cases to validate our solution

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 `````` ``````import org.junit.Test; import static org.junit.Assert.assertEquals; import org.junit.runners.JUnit4; public class FindNextSquareTest { @Test public void test1() { assertEquals(144, NumberFun.findNextSquare(121)); } @Test public void test2() { assertEquals(676, NumberFun.findNextSquare(625)); } @Test public void test3() { assertEquals(-1, NumberFun.findNextSquare(114)); } } ``````