0

編集済み

これがプログラム全体です。char を Character ラッパーでラップして .equals() を使用し、インデックスの問題を修正し、定数をリテラルに置き換えました。プログラムはコンパイルして正常に実行され、シンボルが一致するかどうかを通知しますが、一致しないシンボルがある場合はその「else」ステートメントをスキップします。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.Stack;


public class Exercise22_11 {

/**
 * 
 */
public static void main(String[] args) {

        /**for command line argument*/

        if(args.length == 0) {
            System.out.println("You didn't enter an argument dummy!");
            System.exit(0);
        }


        String fileString = "";

        /**Open the file and read it*/

        try{    
            File myOutFile = new File(args[0]);
            Scanner input = new Scanner(myOutFile);
            while (input.hasNext()){
        fileString += input.next();
            }

        }//try

        catch (FileNotFoundException e){
      System.out.println("Sorry that file is not found " + e);
        }//catch

        /**Build the list of characters from file*/

        char[] charArray = new char[fileString.length()];

        for (int i = 0; i < fileString.length(); i++) {
            charArray[i] = fileString.charAt(i);
        }//for building charArray

        /**Create a stack to manipulate grouping symbols*/

        Stack<Character> stack = new Stack<Character>();

        /**Pushes grouping symbols into stack and pops them when they correspond*/

        for (int i = 0; i < charArray.length; i++) {
            Character temp = new Character(charArray[i]);

            if (temp.equals('{') || temp.equals('(') || temp.equals('[')) {
                stack.push(temp);
            }   else if (temp.equals('}') || temp.equals(')') || temp.equals(']')) {
                if (temp.equals('}') && stack.peek().equals('{')){
                    stack.pop();
                }   else if (temp.equals(')') && stack.peek().equals('(')) {
                    stack.pop();
                }   else if (temp.equals(']') && stack.peek().equals('[')) {
                    stack.pop();
                }   else {
                    System.out.println("There is a mistake at index: " + i);
                    System.out.println("\nHere's the code (the error is in the middle):\n");
                    for(int j = i - 20; j <= i + 20; j++) {
                        System.out.print(charArray[j]);
                    }
                    System.out.println("\n");
                }
            }

        }//for

        /**Inform user of result*/

        if (stack.isEmpty()) {
            System.out.println("Congratulations!  Your grouping symbols are matched!");
        }
        else {
            System.out.println("I'm sorry.  Please fix your program.");
        }



}//main



}//class

エラーが発生すると、実行時に最後の「else」ステートメントがスキップされます。

課題は、プログラム内のグループ化記号が重複しているかどうかをチェックするリストまたはコレクションを使用してプログラムを作成することでした。ファイルは、コマンド ライン引数として入力する必要があります。

私が教授に尋ねたことは次のとおりです(まだ回答はありません)。

  1. .txt (または .java) ファイルからすべての文字を読み取るスキャナを作成できないのはなぜですか? "" (スペースなし) の区切り文字を使用して、char[] への RIDICULOUS String を stack() で操作することを回避しようとしました。

  2. フリギンの「else」ステートメントとは何ですか?

ありがとう!

4

1 に答える 1

0

この print ステートメントがデバッグ用である場合は、 内に配置しないでくださいelse。間違いをelse-ifの1つに入れて修正(またはポップ)し、間違いが見つかった場所を出力する必要があります。そのelseステートメントを取り除きます。成功する

}   else if (temp == SIX && stack.peek().equals(FIVE)) {
                    stack.pop();
                }   
    System.out.println("There is a mistake at index: " + charArray[i]); //it will work now
于 2013-05-03T05:55:44.107 に答える