Обратное целочисленное значение - PullRequest
1 голос
/ 30 августа 2011

Я не могу понять это. Это для домашней работы. Мне нужно создать метод, который переворачивает целое число, которое передается ему. Теперь я смог исправить ошибку outofBounds в цикле for благодаря вкладу каждого. Целое число, которое передается в метод, может иметь любую длину. И я должен вернуть целое число вместо массива или строки. Но теперь я получаю «Нерешенная проблема компиляции: синтаксическая ошибка на токене« [», выражение, ожидаемое после этого токена» в строке int u = backInt[];. Но я понятия не имею, что положить в []. Я не смог найти способ преобразовать массив Integer в целое число, чтобы я мог передать целое число обратно, поэтому я потерян. Вот код, который у меня есть:

public static int reverseIt(int x){

    int y = String.valueOf(x).length();
    int[] backInt = new int [y];
    for(int z = 0; z < y; z++){
        x %=10;
        backInt[z] = x;
        x /= 10;
    }
            int u = backInt[];
            return u;


    return -1;

}

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

Вы начинаете с z=0 и заканчиваете z=y. Это y+1 раза в цикле, но ваш массив имеет длину только y элементов, поэтому исключение возникает на последней итерации цикла при попытке записи в несуществующий элемент. К этому времени, однако, x уже должен быть равен нулю, поскольку вы обработали все y цифр, поэтому ваше условие остановки должно быть z<y вместо z<=y.

1 голос
/ 30 августа 2011

Java-массивы индексируются 0. Это означает, что если вы делаете int[] arr = new int[10], вы создаете целочисленный массив, который может содержать десять ints, и первое целое число сохраняется в arr[0], второе в arr[1], а последнее в arr[10-1] , что составляет arr[9].

Чтобы исправить свой код, измените z <= y на z < y. В будущем, просто помните, что если вы создадите массив для n объектов, то вы можете получить к ним доступ с помощью arr[0], arr[1]... arr[n-1], но доступ к arr[n] вызовет исключение OutOfBounds.

1 голос
/ 30 августа 2011

Вы слишком далеко зашли в своей петле.Это должно быть:

for(int z = 0; z < y; z++) {

... взамен.

Возьмем вход 12 в качестве примера.Его длина составляет два символа, поэтому backInt имеет длину 2. Когда вы проходите цикл, вы перебираете значения z из 0, 1 и 2.Каково значение backInt[2], когда backInt содержит только два элемента?

Редактировать: Ваш код также будет взломан, скажем, для 2147483646, потому что полученное целое число будет слишкомбольшой для типа Integer.Но это не относится к делу.

...