如何使用(),[],{}检查器解决此输出问题?

时间:2019-10-17 00:40:16

标签: java

问题是在扫描名为“ confused.dat”的文件后,它输出应为预期值的90%,而另外10%不正确。

我尝试过交换扫描文件的方法,但是并没有真正改变。

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

public class confused {
    public static boolean isBalanced(String inp) {
        if ((inp.length() % 2) == 1){ return false;}
            else {
                Stack<Character> s = new Stack<>();
                    for (char brackBrick : inp.toCharArray())
                        switch (brackBrick) {
                            case '{': s.push('}'); break;
                            case '(': s.push(')'); break;
                            case '[': s.push(']'); break;
                            default : if (s.isEmpty() || brackBrick != s.peek()) { return false;}
                                      s.pop();
                }
            return s.isEmpty();
        }
    }

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

      try{
          Scanner scrn = new Scanner (new File("confused.dat"));
          while (scrn.hasNextLine()){
              boolean answer = isBalanced(scrn.nextLine());

              if (answer) {
                  System.out.println("Yes");
              } else {
                  System.out.println("No");
              }
          }

      } catch (FileNotFoundException e){e.printStackTrace();}

    }
}

confused.dat文件:


([])
(([()])))
([()[]()])()
(([()])
([] )
(([()])))
([()[]()])()
(
(]
)(
][

此处为预期产量与实际产量

https://imgur.com/cciHkGL

2 个答案:

答案 0 :(得分:2)

应该不,因为

class database {
public:
int row = 0;
int col = 0;
vector <vector<string>> dataset;
void read(string filename) {
    vector<string> data;
    ifstream file{ filename };
    string line;
    while (file)
    {
        getline(file, line);
        string newline;
        newline = line + "\n";
        data.push_back(newline);
    }
    col = count(data.at(0).begin(), data.at(0).end(), ',') + 1;
    row = data.size() - 1;
}
void write(string filename){
    ifstream file{ filename };
    string line;
    while (getline(file, line))
    {
        stringstream ss(line);
        vector<string> column;
        for (int i = 0; i < col; i++)
        {
            getline(ss, column.at(i), ',');
        }
        cout << column.size();
        dataset.push_back(column);
    }       
}
};

((([[(]]))))不是偶数,因此它为false,因此将打印为no。

答案 1 :(得分:0)

哦,我想我明白了。你真的很近。首先,放下这行

if ((inp.length() % 2) == 1){ return false;}

,然后通过在switch语句中添加以下条件来忽略空格:

case ' ': break;

所以所有已更新的方法现在看起来都像这样

public static boolean isBalanced(String inp) {
    Stack<Character> s = new Stack<>();
    for (char brackBrick : inp.toCharArray()) {
        switch (brackBrick) {
            case '{': s.push('}'); break;
            case '(': s.push(')'); break;
            case '[': s.push(']'); break;
            case ' ': break;
            default : if (s.isEmpty() || brackBrick != s.peek()) { return false;}
                s.pop();
        }
    }

    return s.isEmpty();
}

您现在应该获得以下输出

Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
No
No