Почему мой код сравнения строк не работает? - PullRequest
0 голосов
/ 26 мая 2019

этот код выдает

Ошибка "Исключение в потоке" main "java.lang.ArrayIndexOutOfBoundsException: 0

в basic2.compareStrPractice.main (compareStrPractice.java:15)"

int i;
    char[] chr1 = {};
    char[] chr2 = {};
    String s1 = "man";
    String s2 = "nam";

        for ( i= 0; i<s1.length(); i++){

            chr1[i] = (char)s1.charAt(i);
            chr2[i] = (char)s2.charAt(i);

        }
        if ((chr1[0] == chr2[2]) && (chr1[1] == chr2[1]) && (chr1[2] == chr2[0])){

            System.out.println("They are Palindrom!");
        }

}

Я хочу напечатать заявление.но выдает ошибку ArrayOutOfBoundary.

Ответы [ 3 ]

2 голосов
/ 26 мая 2019

Проблема в том, как вы объявили массивы символов.

char[] chr1 = {};

Как вы это сделали, массив определяется с размером 0.

В Java вам нужно указать размер массива следующим образом:

char[] chr1 = new char[3];

Что он делает, так это объявляет массив символов с предопределенным размером 3.

1 голос
/ 26 мая 2019

Если вы пытаетесь написать код для палиндрома, это неправильно во многих отношениях, но из-за ошибки: вы инициализируете пустой массив char размером 0, используйте это

char[] chr1 = new char[3];
0 голосов
/ 27 мая 2019

Вы также должны сначала проверить длины, чтобы убедиться, что они одинаковы. В противном случае вы можете получить еще ArrayIndexOutOfBoundsException. Это произойдет, когда вы используете более длинную строку для индексации более короткого массива символов.

Поскольку для более длинных строк вам не нужно проводить много сравнений в одном операторе if, вы должны использовать цикл и сравнивать, начиная с начала одного массива и в конце другого. Поэтому, если длина равна 5, вы сравниваете символы 0 и 4, затем 1 и 3, затем 2 и 2, затем 3 и 1 и т. Д.

Вот еще несколько советов, которые могут помочь. Вам не нужно создавать пустые массивы и заполнять их. Строка обеспечивает такую ​​возможность.

char[] chr1 = s1.toCharArray();

На самом деле вам не нужно присваивать строковую переменную.

char[] chr1 = "man".toCharArray();

И на тот случай, если вам захочется присвоить массив String вместо char, вы можете сделать это для хранения массива односимвольных строк.

String[] str1 = "abcdefghijklmnopqrstuvwxyz".split("");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...