Как я могу решить проблему привязки из вложенного l oop? - PullRequest
0 голосов
/ 10 июля 2020
public class Launcher {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner sc = new Scanner(System.in);
        final String CAMBRIDGE = "CAMBRIDGE";

        System.out.println("Enter word.");
        String word = sc.nextLine();

        StringBuilder wordSB = new StringBuilder(word);
        StringBuilder camSB = new StringBuilder(CAMBRIDGE);

        System.out.println(wordSB.length());
        System.out.println(camSB.length());
        for (int i = 0; i < wordSB.length(); i++) {
            for (int j = 0; j < camSB.length(); j++) {
                if (wordSB.charAt(i) == camSB.charAt(j)) {
                    System.out.println(wordSB.charAt(i));
                    System.out.println(camSB.charAt(j));
                    wordSB.deleteCharAt(i);
                } // end if
            } // end second for
        } // end for

        System.out.println(wordSB.toString());
        sc.close();
    }

}

Я пытался сравнить повторяющийся элемент, но получил сообщение об ошибке «java .lang.StringIndexOutOfBoundsException: index 3, length 3» из этой строки, когда я ввожу LOVA в качестве входных данных для проверки повторяющейся буквы A.

if (wordSB.charAt(i) == camSB.charAt(j))

Я предполагаю, что проблема связана с вложенным для l oop, но я не мог понять, как это решить. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Строка wordSB.deleteCharAt(i); удаляет символ из wordSB, что означает, что индекс i может указывать на то, чего больше нет. Это может быть проблемой c, если ваш внутренний for-l oop переходит к следующему значению j. Я не уверен, что вы пытаетесь сделать, но вы можете выйти из своего внутреннего l oop после того, как удалили символ, добавив break; после строки wordSB.deleteCharAt(i);.

1 голос
/ 10 июля 2020

Вы удаляете символы из строки, используя ее длину для перебора. Удаление / удаление символа сократит строку -> символ с индексом iw не будет тем, который вы ожидали, что приведет к исключению выхода за пределы в конце, потому что вы продолжаете пропускать символы.

Попробуйте с помощью простого вывода строки, удалив символы с тем же for-l oop, и вы поймете проблему.

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