问题是在扫描名为“ 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文件:
([])
(([()])))
([()[]()])()
(([()])
([] )
(([()])))
([()[]()])()
(
(]
)(
][
此处为预期产量与实际产量
答案 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