0

私のJavaプログラムは以下です。私の練習試合です。1つは、特殊なタイプの文字列解析(区切り文字付きの文字列)用のスタック構造を実装しています。

この区切り文字照合プログラムは、文字列から文字を 1 つずつ読み取り、見つかったときに開始区切り文字をスタックに配置することによって機能します。入力から終了デリミタを読み取ると、スタックの一番上から開始デリミタをポップし、それを終了デリミタと一致させようとします。それらが同じ型でない場合 (たとえば、左中かっこがあり、右中かっこがある場合)、エラーが発生します。また、スタックに終了区切り文字と一致する開始区切り文字がない場合、または区切り文字が一致していない場合は、エラーが発生します。一致していない区切り文字は、文字列内のすべての文字が読み取られた後もスタックに残っているため、検出されます。

私はエクリプスを使用しています。私の出力はここにあります:

Please enter String:
{}
ch0 = {
ch1 = }
chLabel1 = **UNDEFINED CHAR(SQUARE WITH QUESTION MARK INSIDE IT)**
Error at }**

の値を説明していただけますchLabelか?

私が理解しているように、演算子「|」(ここでは、2 つのオペランドがブール型であるため) - "||" のショートカット バージョンである "lazy" です。オペレーター。置換後にプログラムをテストしました "|" "||" の場合、結果は同じです。

public class MyStack {
    private int top=0;
    private int maxSize=0;
    private char[] charArray=null;

    public MyStack(int size){
        maxSize=size;
        top=0;
        charArray=new char[maxSize];
    }

    public void push(char ch){
        charArray[top++]=ch;
    }

    public char pop(){
        return charArray[top--];
    }

    public boolean isEmpty(){
        if(top==0)          
        return true;
        else return false;
    }

    public boolean isFull(){
        if(top==(maxSize-1))            
        return true;
        else return false;
    }
}


class StringParse {
    private String stringForParsing = null;

    public StringParse(String string) {
        this.stringForParsing = string;
    }

    public void parser() {
        char[] chArr = stringForParsing.toCharArray();
        MyStack mySt = new MyStack(chArr.length);

        for (int i = 0; i < chArr.length; i++) {
            char ch = chArr[i];

            switch (ch) {
                case '{':
                case '(':
                case '[':
                    mySt.push(ch);
                    System.out.println("ch" + i + " = " + ch);
                    break;

                case '}':
                case ')':
                case ']':
                    if (mySt.isEmpty())
                        System.out.println("Error at" + ch);
                    else {
                        char chLabel = mySt.pop();
                        System.out.println("ch" + i + " = " + ch);
                        System.out.println("chLabel" + i + " = " + chLabel);

                        if ((chLabel == '{') && (ch == '}') | (chLabel == '(') && (ch == ')') | (chLabel == '[') && (ch == ']'))
                            break;

                        else {
                            System.out.println("Error at " + ch);
                            break;
                        } // end of second else
                    } //end of first else

                default:
                    break;
            } //end of switch
        } //end of parser method
    }
} //end of class


class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System. in ));
        System.out.println("Please enter String:");
        String s = br.readLine();

        StringParse strP = new StringParse(s);
        strP.parser();
    }
}
4

2 に答える 2