Проблема с обращением каждого числа в массиве в Java

Я пытаюсь инвертировать каждое число в массиве Integer с помощью do-while, но получаю ошибку NullPointerException. Я пытаюсь инвертировать каждый элемент в этом массиве: например, если это мой массив: {12,34,56} тогда результат должен быть: {21,43,65}. Может ли кто-нибудь помочь мне с этим?

public class Reverse {
  public int[] revCalculator(int[] number) {
    int[] reverse = null;
    for (int j = 0; j < number.length; j++) {
        do {
            reverse[j] = reverse[j] * 10 + number[j] % 10;
            number[j] /= 10;
        } while (number[j] > 0);
    }
    return reverse;
  }
}

public class ShowReverse {

  public static void main(String[] args) {

    // instantiation
    // -----------------------------------------
    Reverse rev = new Reverse();
    @SuppressWarnings("resource")
    Scanner in = new Scanner(System.in);


    System.out.println("Enter The Number Of Elements: ");
    int len = in.nextInt();
    int[] numbers = new int[len];


    for (int i = 0; i < len; i++) {
        System.out.println("Enter Number: ");
        numbers[i] = in.nextInt();
    }


    int[] result = rev.revCalculator(numbers);

    // shows the result
    // -----------------------------------------
    System.out.println("THE REVERSE WOULD BE: ");
    System.out.print(result);

  }
}

рис

int[] реверс = ноль; реверс не инициализирован

Kasper H 19.04.2019 16:10

Как видите, я использовал его... но это бесполезно

Rojin 19.04.2019 16:11

Вы не сможете использовать его, если сначала не создадите его. Вот почему вы получаете NPE здесь.

Kasper H 19.04.2019 16:14
reverse устанавливается равным нулю. Вы не можете обращаться с нулем как с массивом. Вам нужно инициализировать reverse массивом действительный: int[] reverse = new int[number.length]'
Jordan 19.04.2019 16:21

спасибо .. не могли бы вы проверить картинку и показать мне результат?

Rojin 19.04.2019 16:22

@Rojin Можете ли вы передать целочисленный массив System.out.print? Я бы поместил ваш код в блок try-catch и просматривал бы любые exception сообщения, которые вы можете получать.

Ryan Wilson 19.04.2019 16:27

вы должны тщательно отлаживать код, прежде чем спрашивать других

Zain Arshad 19.04.2019 18:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
7
375
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы не инициализировали свою переменную reverseArray, инициализируйте ее так:

ОБНОВЛЕНИЕ, я вижу, что вы пытаетесь сделать, вы хотите изменить значения вашего массива, а не сам массив

public int[] revCalculator(int[] number) {
    int[] reverse = new int[number.length]; //Initialize it to the same size as the passed in arary
    //int[] reverse = null; //Problem
    StringBuilder sb = new StringBuilder();
    for (int j = 0; j < number.length; j++) 
    {
        //You could convert the number to string then reverse it and use parseInt() int
        reverse[j] = parseInt(sb.append(number[j].toString()).reverse().toString());
        //Clear the StringBuilder object
        sb.setLength(0);

    }
    return reverse;
}

спасибо, но теперь у меня возникла проблема с отображением результата ... не могли бы вы проверить картинку?

Rojin 19.04.2019 16:17

спасибо ... ЭТО ПОМОГЛО ... все, что мне нужно было сделать, это повторить итерацию при печати результата!

Rojin 19.04.2019 16:53

@Rojin Рад, что я мог помочь, также я обновил свой ответ, поскольку создание нового StringBuilder на каждой итерации расточительно, более эффективно, если вы идете по маршруту / решению StringBuilder, вы просто создаете один StringBuilder и очищаете буфер внутри него.

Ryan Wilson 19.04.2019 17:02

Я бы рекомендовал инициализировать обратный массив массивом той же длины, что и числовой массив.

int[] reverse = new int[number.length];

теперь у меня возникла проблема с отображением результата ... не могли бы вы проверить картинку?

Rojin 19.04.2019 16:20

Есть пара изменений, которые вы должны сделать:

  1. инициализировать обратный массив int[] reverse = new int[number.length];
  2. System.out.print(result); даст вам адрес массива результатов. Вы должны показать элементы массива.

    int[] result = new int[numbers.length];
    result = rev.revCalculator(numbers);
    
    // shows the result
    // -----------------------------------------
    System.out.println("THE REVERSE WOULD BE: ");
    //System.out.print(result);
    for(int i = 0 ; i<result.length; i++)
        System.out.println(result[i]);
    

Надеюсь это поможет.

большое спасибо .... Я отредактировал свой код после того, как узнал, что не могу напрямую распечатать элементы массива;))

Rojin 19.04.2019 18:09

Другие вопросы по теме