ЗЫ: Для числа 1 000 000 000 такой ошибка не возникает, отсюда возникает ощущение, что где-то происходит ошибка в приведении типа int к long, НО где это происходит совсем не понятно(
Вообще не понимаю откуда появляется отрицательное число (-8 в данном случае)
PaiMei in J#
35 уровень
ПАМААГИТЕЕЕ!!! Огромная просьба помочь разобраться на каком этапе вылетает ошибка Index out of bounds и по какой причине.
Решен
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia Volkova Java Developer в DXC Master
6 мая 2021, 09:55
Ты бы код нормально выложил...
0
PaiMei in J# Grand Master в Eagles' Claw
6 мая 2021, 12:50
public class Main {
public static void main(String[] args) {
long[][] matrix = new long[10][15];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < 15; j++) {
matrix[i][j] = (long) Math.pow(i, j);
}
}
long time1 = System.currentTimeMillis();
long x = 10000000000L;
int sum = 0;
long[] list = new long[45];
int count = 0;
for (long i = 1L; i < x; i++) {
int length = String.valueOf(i).length();
long i2 = (long) i;
while (i2 != 0) {
long i3 = i2 % 10;
sum += matrix[(int)i3][length];
i2 = i2 / 10;
}
if (sum == i) {
list[count++] = i;
}
sum = 0;
}
System.out.println(Arrays.toString(list));
long time2 = System.currentTimeMillis();
long time3 = (time2 - time1) / 1000;
System.out.println(time3);
}
}
0
PaiMei in J# Grand Master в Eagles' Claw
6 мая 2021, 09:47
int i3 по идее хранит в себе числа от 0 до 9 (остаток от деления)
0
Ksenia Volkova Java Developer в DXC Master
6 мая 2021, 10:15решение
А зачем тебе приведение i2 к int в 20 строке?
+2
PaiMei in J# Grand Master в Eagles' Claw
6 мая 2021, 12:50
На 21 строке все равно нужно приводить будет, что бы найти в matrix[(int)i3][length];
0
PaiMei in J# Grand Master в Eagles' Claw
6 мая 2021, 12:53
аааа, я кажется все понял, спасибо!))
Здесь как раз и была проблема, так как приведение на этом этапе и превращало "правильный" long в "очень странный" int)
0
Ksenia Volkova Java Developer в DXC Master
6 мая 2021, 12:54
Ты понимаешь разницу между
и
? 0
PaiMei in J# Grand Master в Eagles' Claw
6 мая 2021, 13:01
Думаю да, просто как-то не подумал про этот вариант, ну т.е в 1 случае мы сначала приводит к типу int i2, и если, например, в i2 у нас хранится число > Integer.MAX_VALUE, то будет атата, а во 2 случае мы сначала находим остаток от деления (операция в скобках), а уже затем приводим его (результат 0<=x<=9) к типу int)
0
PaiMei in J# Grand Master в Eagles' Claw
6 мая 2021, 13:02
Спасибо, еще чуть-чуть и я бы закипел😁
0