Программа не завершает работу

97
13 сентября 2021, 23:00

Мне нужно циклически сдвигать символы, после ряда таких сдвигов должна получится реверснутая строка. Например: caba -> acba->abca->abac Нужно подсчитать кол-во таких сдвигов, но что-то не так :

public static void main(String args[]) {
    int N = scanner.nextInt();
    String s = scanner.next();
    StringBuffer reverse = new StringBuffer(s);
    StringBuffer sb = new StringBuffer(s);
    reverse = reverse.reverse();
    System.out.print(reverse);
    System.out.println(sb);
    int cnt = 0;
    while (!(sb.equals(reverse))) {
        for (int i = 0; i < N - 1; i++) {
            char t = sb.charAt(0);
            System.out.println(i);
            sb = sb.deleteCharAt(i);
            sb = sb.insert(i + 1, t);
            cnt++;
            System.out.println(sb);
        }
    }
    System.out.println(cnt);
}
Answer 1

Я исправила ошибки в программе. И получился такой вариант:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("Введите исходную строку: ");
    String s = scanner.next();
    StringBuilder reverse = new StringBuilder(s);
    StringBuilder sb = new StringBuilder(s);
    reverse.reverse();
    System.out.println("Исходная строка: " + sb);
    System.out.println("Целевая строка: " + reverse);
    int cnt = 0;
    String revStr = reverse.toString();
    while (!(sb.toString().equals(revStr))) {
        for (int i = 0; i < sb.length() - 1; i++) {
            char t = sb.charAt(i);
            sb.deleteCharAt(i);
            sb.insert(i + 1, t);
            cnt++;
            System.out.println("Промежуточный результат: " + sb);
        }
    }
    System.out.println("Количество сдвигов: " + cnt);
}

Результат работы:

Введите исходную строку: caba
Исходная строка: caba
Целевая строка: abac
Промежуточный результат: acba
Промежуточный результат: abca
Промежуточный результат: abac
Количество сдвигов: 3

Но нужно понимать, что подобным образом невозможно реверсировать строку. В вашем примере это получается только потому, что 1й и 3й символы совпадают. Если ввести строку с разными символами, то условие цикла while никогда не выполнится и программа зациклится.

READ ALSO
Перестает обновляться страница

Перестает обновляться страница

У меня есть таймер и в таймере перезагрузка страницы и со временем она перестает перезагружатьсяПочему?

142
@CreateTimestamp, @UpdateTimestamp. Почему при обновлении записи в create null?

@CreateTimestamp, @UpdateTimestamp. Почему при обновлении записи в create null?

Кто может подсказать, как можно реализовать? У меня есть поля:

144
Запрос к базе данных через JDBC. PostgresSQL

Запрос к базе данных через JDBC. PostgresSQL

Есть java программа и таблица"students в базе данных:

84