Объявление long [] массива в java

Может ли кто-нибудь сказать мне, почему я не могу объявить массив таким образом?

long[] powers = { 0, 0, 1, 7, 35, 155, 651, 2667, 10795, 43435,
                174251, 698027, 2794155, 11180715, 44731051, 178940587,
                715795115, 2863245995, 11453115051, 45812722347, 183251413675,
                733006703275, 2932028910251, 11728119835307, 46912487729835,
                187649967696555, 750599904340651, 3002399684471467};

Компилятор говорит, что литерал типа int находится вне диапазона. Я также пытался сделать это так долго

long[] powers = { 0, 0, 1, 7, 35, 155, 651, 2667, 10795, 43435,
                174251, 698027, 2794155, 11180715, 44731051, 178940587,
                715795115, (long)2863245995, (long)11453115051, (long)45812722347, etc ...

но ничего не изменилось и попробовал подобное: Long.valueOf(x), где x - это компилятор с числовым значением, с которым связана проблема.

Любые идеи?

Заранее спасибо

Ответ 1

Обычное число считается int в java. Добавьте L, которые больше, чем Integer.MAX_VALUE, чтобы преобразовать long.

long[] powers = {..., 2863245995L, 11453115051L, ...};

Согласно docs

Integer литерал имеет тип long, если он суффикс с ASCII буква L или l (ell); в противном случае он имеет тип int.

Суффикс L является предпочтительным, поскольку букву l (ell) часто трудно отличить от цифры 1 (один).

Ответ 2

Вы пробовали что-то вроде этого?

long[] powers = { 0, 0, 1, 7, 35, 155, 651, 2667, 10795, 43435,
            174251, 698027, 2794155, 11180715, 44731051, 178940587,
            715795115L, 2863245995L, 11453115051L, 45812722347L, 183251413675L,
            733006703275L, 2932028910251L, 11728119835307L, 46912487729835L,
            187649967696555L, 750599904340651L, 3002399684471467L};