Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > PAMAGITE PAJALUSTA NAVICHKU


Автор: KrutoiNol 11.10.2009, 14:10
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 

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

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

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


Автор: Данкинг 11.10.2009, 14:22
В-пятых, на форуме вроде как русский язык принят.

Автор: revenforv 11.10.2009, 23:02
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();
    }

}

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)