Является ли логика в моей программе близкой с точки зрения достижения решения? - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь подсчитать, сколько раз буква появляется в строке (aabcccccaaa), и помещаю количество раз, которое она выполняет, в новую строку вместе с соответствующей буквой.Проблема в том, что я получаю StringIndexOutOfBoundsException.

У меня вроде есть подсказка, почему, но я думаю, что это в основном потому, что моя логика ошибочна в этой проблеме.

Я на правильном пути?Что я делаю не так и как я могу это исправить?

Например, вывод должен быть a2b1c5a3

Вот мой код:

public class Problem {

public static void main(String []args) {
    String str = "aabcccccaaa";
    System.out.println(compressBad(str));
}

public static String compressBad(String str) {
    int countConsecutive = 0;
    String compressedString = "";

    for(int i = 0; i < str.length(); i++) {
        if(str.charAt(i) != str.charAt(i + 1)) {
            countConsecutive++;
            compressedString += "" + str.charAt(i) + countConsecutive;
            countConsecutive = 0;
        }
    }
    return compressedString;
  }
}

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Для чего это стоит, вот что я бы сделал:

public static String compressBad(final String str) {

    if (str == null || str.length() < 0) {
        return "";
    }

    int countConsecutive = 0;

    StringBuilder sb = new StringBuilder();
    char previousLetter = str.charAt(0);

    for (char c : str.toCharArray()) {
        if (c == previousLetter) {
            countConsecutive++;
        } else {
            sb.append(previousLetter).append(countConsecutive);

            previousLetter = c;
            countConsecutive = 1;
        }
    }
    sb.append(previousLetter).append(countConsecutive);

    return sb.toString();
}
0 голосов
/ 07 февраля 2019

Эта строка str.charAt(i + 1) будет считываться вне границ, когда i является последним индексом, i+1 теперь выходит за пределы.

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