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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> PAMAGITE PAJALUSTA NAVICHKU, pamagite napisat progu 
:(
    Опции темы
KrutoiNol
Дата 11.10.2009, 14:10 (ссылка)    | (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



package javaapplication2.braceChecker;
public class BraceChecker {
    private String inputText;
    private String ErrorMessage1 = "sxal e pakvac";
     private String ErrorMessage2= "chi sksvum pakumov";
      private String ErrorMessage3 = "bacel es bayc ches pakel";
    private Stack stack ;

    public BraceChecker(String inputStr) {
        this.inputText = inputStr;
        stack = new Stack(inputStr.length());
    }

    public void parse(){
        lab:for (int i = 0; i < inputText.length(); i++) {
           char ch = inputText.charAt(i);
           switch(ch) {
               case '[':stack.push('[');break;
               case '{':stack.push('{');break;
               case '(':stack.push('(');break;
               // TODO: push , after which break;
               case ']':if ((char)stack.pop()!='['){
                        System.out.println(ErrorMessage1);
                        break lab;
               }
                         else if (stack.pop()==0) System.out.println(ErrorMessage2);
                               else stack.pop();break;
               case '}':if ((char)stack.pop()!='{'){
                         System.out.println(ErrorMessage1);
                         break lab;
               }
                        else if (stack.pop()==0) System.out.println(ErrorMessage2);
                              else stack.pop();break;
               case ')':if ((char)stack.pop()!='('){
                        System.out.println(ErrorMessage1);
                        break lab;
               }
                         else if (stack.pop()==0) System.out.println(ErrorMessage2);
                              else stack.pop();break;
           }

        }
        if (stack.pop()>0)System.out.println(ErrorMessage3);
    }

}


ne rabotayet 

PM MAIL   Вверх
Данкинг
Дата 11.10.2009, 14:17 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



 smile Хотел минус в репу поставить, уже кликнул, но затем передумал. Я добрый сегодня. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Samotnik
Дата 11.10.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Цитата(KrutoiNol @  11.10.2009,  14:10 Найти цитируемый пост)
ne rabotayet 

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


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


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



В-пятых, на форуме вроде как русский язык принят.

Это сообщение отредактировал(а) Данкинг - 11.10.2009, 14:22


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
revenforv
Дата 11.10.2009, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



toKrutoiNol:
I think, this doesn't work because after stack.pop() an element is really thrown away of the stack. So you can't do it repeatedly to test if() {} elseif() {} else {} statement.
As i've understood this util tests if "braces" are correctly coupled.
With minimal changes to your code that would look like the one below. I've added stack implementation and main() method. Your "algorithm" is left as previous.

Думаю это не работает, потому что после того, как вы делаете stack.pop() элемент действительно выбрасывается из стека. Поэтому нельзя применять его для проверки одного и того же элемента в конструкции if() {} else if() {} else {}.
Программа, как я понял должна проверять правильность расстановки скобок в строке.
С минимальными изменениями программу можно переписать так, как представлено ниже. Я добавил реализацию стека и метод main(). Ваш "алгоритм" оставил без изменений.

Код

public class BraceCheckerProblem {

    public class Stack {

        private final int TOP;
        private final int BOTTOM = 0;

        private char[] stack;
        private int sp = BOTTOM;

        public Stack(int size) {
            TOP = size;
            stack = new char[TOP];
        }

        public void push(char c) {
            if (sp < TOP) {
                stack[sp++] = c;
            }
        }

        public char pop() {
            char val = 0;
            if (sp > BOTTOM) {
                val = stack[--sp];
            }

            return val;
        }
    }

    private String inputText;
    private String ErrorMessage1 = " <--\nIncorect brace";
    private String ErrorMessage2 = " <--\nStack bottom reached while parsing";
    private String ErrorMessage3 = " <--\nStack not empty at string end";
    private String GoodMessage = "\nOK";

    private Stack stack;

    public BraceCheckerProblem(String inputStr) {
        this.inputText = inputStr;
        stack = new Stack(inputStr.length());
    }

    public void parse() {
        char spop = 0;

        for (int i = 0; i < inputText.length(); i++) {
            char ch = inputText.charAt(i);
            System.out.print(ch);
            switch (ch) {
            case '[':
                stack.push('[');
                break;
            case '{':
                stack.push('{');
                break;
            case '(':
                stack.push('(');
                break;
            // TODO: push , after which break;
            case ']':
                spop = stack.pop();
                if (spop != '[') {
                    System.out.println(ErrorMessage1);
                    return;
                } else if (spop == 0) {
                    System.out.println(ErrorMessage2);
                }
                break;
            case '}':
                spop = stack.pop();
                if (spop != '{') {
                    System.out.println(ErrorMessage1);
                    return;
                } else if (spop == 0) {
                    System.out.println(ErrorMessage2);
                }
                break;
            case ')':
                spop = stack.pop();
                if (spop != '(') {
                    System.out.println(ErrorMessage1);
                    return;
                } else if (spop == 0) {
                    System.out.println(ErrorMessage2);
                }
                break;
            }
        }

        spop = stack.pop();
        if (spop > 0) {
            System.out.println(ErrorMessage3);
        }

        System.out.println(GoodMessage);
    }

    public static void main(String[] args) {
        String str = "({{[]}})({}){{hgh}{()}}}";

        BraceCheckerProblem bcp = new BraceCheckerProblem(str);
        bcp.parse();
    }

}

PM MAIL Skype   Вверх
powerOn
Дата 11.10.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Модератор: Сначала читаем правила форума, потом создаем темы.
Правила форума: http://forum.vingrad.ru/index.php?act=boardrules


--------------------
user posted image нет времени думать - нужно писать КОД!

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

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

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


 




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


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

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