Пишет, что:
Проверь, что в методе getNumbers не возникает исключения, при любых входных данных.
В чем дело? Коллеги нужна помощь.
package com.javarush.task.task20.task2025;
import org.omg.PortableInterceptor.LOCATION_FORWARD;
import java.lang.reflect.Array;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
/*
Алгоритмы-числа
*/
public class Solution {
private static long[][] degree = new long[10][19];
static {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 19; j++) {
degree[i][j] =
Math.round(Math.pow(Double.valueOf(((Integer) i).toString()), Double.valueOf(((Integer) (j + 1)).toString())));
}
}
}
private static long maxNum;
private static ArrayList<Long> arrayList = new ArrayList();
private static void printArray(int[] numArray){
for (int i = 0; i < numArray.length; i++) {
System.out.print(numArray[i]);
}
System.out.println();
}
private static boolean numEquals(int[] numArray, Long resultSelfLovely){
int[] mass1 = new int[numArray.length];
String stringResultDegree = String.valueOf(resultSelfLovely);
int countZero = numArray.length - stringResultDegree.length();
if (countZero < 0 || resultSelfLovely < 0){
return false;
}
for (int i = 0; i < countZero; i++) {
mass1[i] = 0;
}
for (int i = 0; i < stringResultDegree.length(); i++) {
int next = 0;
try {
next = Integer.valueOf(stringResultDegree.substring(i, i + 1));
} catch (Exception e){
next = 0;
}
mass1[countZero + i] = next;
}
Arrays.sort(mass1);
if (Arrays.equals(mass1, numArray))
return true;
else
return false;
}
private static boolean isNumberSelfLovely1(int[] numArray, long N){
boolean isStart = true;
//String resultString = "";
long result = 0L;
long resultSelfLovely = 0L;
int countZero = 0;
int degreeNumber = 0;
for (int i = 0; i < numArray.length; i++) {
//Получаем комбинации
if (numArray[i] == 0 && isStart){
countZero++;
}else isStart = false;
//в степень...
if (numArray[i] == 0){
continue;
}
degreeNumber = numArray.length - countZero;
resultSelfLovely = resultSelfLovely + degree[numArray[i]] [degreeNumber - 1];
}
//Проверим число
if (numEquals(numArray, resultSelfLovely) && resultSelfLovely < N && degreeNumber == String.valueOf(resultSelfLovely).length()){
//System.out.println(resultSelfLovely);
arrayList.add(resultSelfLovely);
return true;
}
if (countZero > 0){
for (int j = 0; j < countZero; j++) {
degreeNumber++;
resultSelfLovely = 0L;
for (int i = 0; i < numArray.length; i++) {
if (numArray[i] == 0){
continue;
}
resultSelfLovely += degree[numArray[i]] [degreeNumber - 1];
}
if (numEquals(numArray, resultSelfLovely) && resultSelfLovely < N && degreeNumber == String.valueOf(resultSelfLovely).length()){
//System.out.println(resultSelfLovely);
arrayList.add(resultSelfLovely);
return true;
}
}
}
return false;
}
public static long[] getNumbers(long N) {
int[] numArray = new int[String.valueOf(N).length()];
Arrays.fill(numArray, 0);
arrayList.clear();
int pos = numArray.length - 1;
while (true){
if (numArray[pos] < 9) {
numArray[pos]++;
isNumberSelfLovely1(numArray, N);
//printArray(numArray);
//arrayList.add(new Number(numArray, 0L));
} else {
if (pos == 0){
break;
}
pos--;
if (numArray[pos] < 9){
int nextNum = ++numArray[pos];
for (int i = pos + 1; i < numArray.length; i++) {
numArray[i] = nextNum;
}
isNumberSelfLovely1(numArray, N);
//printArray(numArray);
pos = numArray.length - 1;//смещение
}
}
}
//printArray(numArray);
//System.out.println(arrayList.size());
long[] result = new long[arrayList.size()];
for (int i = 0; i < arrayList.size(); i++) {
result[i] = arrayList.get(i);
}
return result;
}
public static void main(String[] args) {
// Long resultSelfLovely = 8394598099560940629L;
// //if (4929273885928088826L == resultSelfLovely){
// char[] array = resultSelfLovely.toString().toCharArray();
// long degree = 0L;
// for (int i = 0; i < array.length; i++) {
// degree = degree + (long) Math.pow(Integer.valueOf(String.valueOf(array[i])), array.length);
// }
// if (degree == resultSelfLovely){
// System.out.println("is self lovely");
// }
// System.out.println("this");
//}
//21897142587612075
//8394598099560940629
//System.out.println(isNumberSelfLovely1(new int[]{0,1,4,5} , 4151L));
//System.out.println(isNumberSelfLovely1(new int[]{2,1,8,9,7,1,4,2,5,8,7,6,1,2,0,7,5} , 21897142587612075L));
//System.out.println(isNumberSelfLovely1(new int[]{8,3,9,4,5,9,8,0,9,9,5,6,0,9,4,0,6,2,9} , 8394598099560940629L));
//return;
//getNumbers(Long.MAX_VALUE);
//return;
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9
// 153
// 370
// 371
// 407
// 1634
// 8208
// 94749474
// 54748
// 92727
// 93084
// 548834
// 1741725
// 4210818
// 9800817
// 9926315
// 24678050
// 24678051
// 88593477
// 146511208
// 472335975
// 534494836
// 912985153
// 4679307774
/*
1
2
3
4
5
6
7
8
9
153
370
371
407
1634
8208
9474
54748
92727,
93084,
548834,
1741725,
4210818,
9800817,
9926315,
24678050,
24678051,
88593477,
146511208,
472335975,
534494836,
912985153,
4679307774L,
32164049650L,
32164049651L,
40028394225L,
42678290603L,
44708635679L,
49388550606L,
82693916578L,
94204591914L,
28116440335967L,
4338281769391370L,
4338281769391371L,
21897142587612075L,
35641594208964132L,
35875699062250035L,
1517841543307505039L,
3289582984443187032L,
498128791164624869L,
4929273885928088826L*/
//getNumbers(9223372036854775807L);
//System.out.println(Math.pow(9d,4d) + Math.pow(4d,4d) + Math.pow(7d,4d) + Math.pow(4d,4d));
//getNumbers(999L);
//getNumbers(99994679307774L);
// int[] numArray = new int[]{1, 2, 3};
// printArray(numArray);
// getTransposition(numArray, 1);
// for (int i = 0; i < arrayList.size(); i++) {
// System.out.println(arrayList.get(i));
// }
//Проверка
long start = System.currentTimeMillis();
//getNumbers(9999999);
getNumbers(9223372036854775807L);
//getNumbers(99999L);
long end = System.currentTimeMillis() - start;
long memore = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
System.out.println(end / 1000);
System.out.println(memore / 1048576);
}
}