Java: ArrayIndexOutOfBoundsExeption - PullRequest
       6

Java: ArrayIndexOutOfBoundsExeption

0 голосов
/ 20 января 2020

Я создал программу, которая должна преобразовывать массив длиной 10 int в формат «Номер телефона». Например, вот так: Solution.createPhoneNumber (new int [] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}) // => возвращает "(123) 456-7890"

Вот мой код: Решение. java:

public class Solution {

    public static String createPhoneNumber(int[] numbers) {

        int counter = 0;

        char[] temp = new char[numbers.length + 4];

        temp[0] = '(';
        temp[4] = ')';
        temp[5] = ' ';
        temp[9] = '-';

        for (int i = 0 ; i < temp.length ; i++)
        {
            if (i!=0 && i!=4 && i!=5 && i!=9)
            {
                temp[i] = (char) numbers[counter];
                counter++;
            }

        }

        String solution = new String(temp);

        return solution;

    }
}

Test. java:

public class Test {

    public static void main(String[] args) {

        int[] test = new int[10];

        test[0] = 1;
        test[1] = 2;
        test[2] = 3;
        test[3] = 4;
        test[4] = 5;
        test[5] = 6;
        test[6] = 7;
        test[7] = 8;
        test[8] = 9;
        test[9] = 0;

        System.out.println(Solution.createPhoneNumber(test));



    }

}

Я получаю ArrayIndexOutOfBoundsExeption, и я не знаю почему. В моем тестовом массиве у меня есть 10 чисел, как в примере.

Ответы [ 2 ]

3 голосов
/ 20 января 2020

Измените свой l oop следующим образом:

for (int i = 0 ; i < temp.length ; i++) {
    if (i!=0 && i!=4 && i!=5 && i!=9) {
        temp[i] = (char)(numbers[counter] + (int)'0');
        counter++;
    }
}

В своем коде вы увеличиваете условие counter за пределами if, поэтому counter может увеличиться до temp.length, что больше чем numbers.length, поэтому numbers[counter] дает вам исключение.

И, как сказал @rzwitserloot, вы должны заменить || на &&

1 голос
/ 20 января 2020

if (i != 0 || i != 4) равно всегда верно . Если i равно 0, то i != 0 - это ложный термин, но i != 4 - это истина, а false || true - это истина. Таким образом, всегда true, таким образом, счетчик всегда увеличивается, таким образом, он достигает 10, и у вас заканчиваются входные цифры.

Попробуйте использовать &&:)

...