後置計算機に中置を書き込もうとしています。私は以下を含むファイルから読んでいます:
(4> 3)+(3 = 4)+2
コードを実行すると、入力の接尾辞表記を含む文字列を取得するはずですが、まったく何も取得しません。私のコードは最終的な印刷ステートメントに到達していないようです。また、少なくとも印刷するようにコードを変更すると(表記は正しくありませんが)、演算子(+、-、&など)ではなく数値のみが出力されます。なぜこれが起こっているのか理解できません!私は以下のコードでラベルを付けました。ここで、printステートメントは次のとおりです。
public static void main(String[] args) {
readMathFile();
}
static String PF = "";
public static void postfix(char c, myStack s, myQueue q) {
if (c == '0' || c == '1' || c == '2' || c == '3' || c == '4' ||
c == '5' || c == '6' || c == '7' || c == '8' || c == '9') {
String cc = Character.toString(c);
PF.concat(cc);
} else if(c == '!' || c == '*' || c == '/' || c == '+' || c == '-' ||
c == '<' || c == '>' || c == '=' || c == '&' || c == '|') {
if(s.isEmpty())
s.push(c);
else {
char top = s.peek();
while ((precedence(top) > precedence(c)) && !s.isEmpty()) {
String cd = Character.toString(s.pop());
PF.concat(cd);
}
s.push(c);
}
}
}
public static myStack s;
public static myQueue q;
public static int i = 1;
// the file reading code was borrowed from:
// http://www.java2s.com/Code/Java/File-Input-Output/Readfilecharacterbycharacter.htm
public static void readMathFile() {
s = new myStack();
q = new myQueue();
File file = new File("test.txt");
if (!file.exists()) {
System.out.println(file + " does not exist.");
return;
}
if (!(file.isFile() && file.canRead())) {
System.out.println(file.getName() + " cannot be read from.");
return;
}
try {
FileInputStream fis = new FileInputStream(file);
char current;
// in this while loop is where all of the reading happens
while (fis.available() > 0) {
current = (char) fis.read();
//readMath(current, s, q);
postfix(current, s, q);
}
if(fis.available() == 0) {
char x = s.pop();
while(!s.isEmpty()) {
//q.enqueue(s.pop());
String ce = Character.toString(s.pop());
PF.concat(ce);
}
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("\n\n"+PF); // <----CODE NEVER REACHES THIS POINT! (and when i modify so it does, it will not print the operators!)
}