Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> трехмерный массив 
:(
    Опции темы
silivdar
Дата 21.12.2014, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 21.12.2014

Репутация: нет
Всего: нет



Привет всем. Срочно нужна помощь! Не мог бы кто-нибудь объяснить подробно и по порядку, что делает этот код? Знаю только саму суть, что он читает строку, находит самые длинные четные и нечетные палиндромы(слова, читающиеся слева направо и справа налево одинаково, например, aabaa или gag), а потом выводит их на экран, при этом там еще выводится его длина и позиция первого символа (считая слева). Заранее спасибо)
Код

public static void palindrom(String s) {
        String str;//promenne
        boolean evenpal, oddpal;
        int k, m, poz, c;
        int n = 0;
        int k1, m1, poz1, c1;
        int n1 = 0;
        int[][][] pal = new int[s.length()][2][3];
        for (int i = 2; i < (s.length() - 2); i++) {
            k = 0;
            c = 1;
            poz = 0;
            evenpal = false;
            oddpal = false;
            if (s.charAt(i) == s.charAt(i + 1)) {
                evenpal = true;
            }
            if (s.charAt(i) == s.charAt(i + 2)) {
                oddpal = true;
            }
            while (evenpal != false) {       //hledame sude palindromy
                if (s.charAt(i - k) == s.charAt(i + c)) {
                    m = poz + 2;
                    k++;
                    c++;
                    poz = m;
                } else {
                    evenpal = false;
                }
            }
            if (pal[0][1][0] < poz) {
                n = 0;
                pal[n][0][0] = i - k + 1;
                pal[n][1][0] = poz;
            }
            if (pal[0][1][0] == poz) {
                pal[n][0][0] = i - k + 1;
                pal[n][1][0] = poz;
                n++;
            }
            k1 = 0;
            c1 = 2;
            m1 = 1;
            poz1 = 0;
            while (oddpal != false) {    //hledame liche palindromy
                if (s.charAt(i - k1) == s.charAt(i + c1)) {
                    m1 = m1 + 2;
                    k1++;
                    c1++;
                    poz1 = m1;
                } else {
                    oddpal = false;
                }
            }
            if (pal[0][1][1] < poz1) {
                n1 = 0;
                pal[n1][0][1] = i - k1 + 1;
                pal[n1][1][1] = poz1;
            }
            if (pal[0][1][1] == poz1) {
                pal[n1][0][1] = i - k1 + 1;
                pal[n1][1][1] = poz1;
                n1++;
            }
        }
        n = 0;
        System.out.println("EVEN_PALINDROM\tMAX_LENTGTH = " + pal[0][1][0]);//vypisujeme sude palindromy
        while (pal[n][1][0] == pal[0][1][0]) {
            str = s.substring(pal[n][0][0], (pal[n][0][0] + pal[0][1][0]));
            System.out.print(pal[n][0][0] + "  " + str);

            System.out.print("\n");
            n++;
        }
        n1 = 0;
        System.out.println("ODD_PALINDROM\tMAX_LENTGTH = " + pal[0][1][1]);//vypisujeme liche palindromy
        while (pal[n1][1][1] == pal[0][1][1]) {
            str = s.substring(pal[n1][0][1], (pal[n1][0][1] + pal[0][1][1]));
            System.out.println(pal[n1][0][1] + "  " + str);
            n1++;
        }

    

PM MAIL   Вверх
Pawl
Дата 6.1.2015, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Код какой-то мутный: если вводимая строка начинается с палиндрома или заканчивается им, происходит StringIndexOutOfBoundsException в этом месте:
Код

if (s.charAt(i - k) == s.charAt(i + c))

Я бы поискал для себя код получше.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
AntonSaburov
Дата 15.2.2015, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Делать такое через массивы - бред какой-то. Не проще ли строки тупо переворачивать и сравнивать с исходной ?
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0501 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.