Я пытаюсь инвертировать каждое число в массиве 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);
}
}
Как видите, я использовал его... но это бесполезно
Вы не сможете использовать его, если сначала не создадите его. Вот почему вы получаете NPE здесь.
reverse устанавливается равным нулю. Вы не можете обращаться с нулем как с массивом. Вам нужно инициализировать reverse массивом действительный: int[] reverse = new int[number.length]'спасибо .. не могли бы вы проверить картинку и показать мне результат?
@Rojin Можете ли вы передать целочисленный массив System.out.print? Я бы поместил ваш код в блок try-catch и просматривал бы любые exception сообщения, которые вы можете получать.
вы должны тщательно отлаживать код, прежде чем спрашивать других




Вы не инициализировали свою переменную 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 Рад, что я мог помочь, также я обновил свой ответ, поскольку создание нового StringBuilder на каждой итерации расточительно, более эффективно, если вы идете по маршруту / решению StringBuilder, вы просто создаете один StringBuilder и очищаете буфер внутри него.
Я бы рекомендовал инициализировать обратный массив массивом той же длины, что и числовой массив.
int[] reverse = new int[number.length];
теперь у меня возникла проблема с отображением результата ... не могли бы вы проверить картинку?
Есть пара изменений, которые вы должны сделать:
int[] reverse = new int[number.length];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]);
Надеюсь это поможет.
большое спасибо .... Я отредактировал свой код после того, как узнал, что не могу напрямую распечатать элементы массива;))
int[] реверс = ноль; реверс не инициализирован