所以我正在製作一個程序來評估文件中的後綴表達式。但我不斷收到錯誤:使用堆棧錯誤的後綴評估(java)
0
Exception in thread "main" java.lang.NumberFormatException: For input string: "+"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:484)
at java.lang.Integer.valueOf(Integer.java:582)
at postfixEvaluater.postfixEvaluation(postfixEvaluater.java:89)
at postfixEvaluater.readFromTheFile(postfixEvaluater.java:49)
at postfixEvaluater.main(postfixEvaluater.java:21)
所以我猜測它與我的運營商基於這個有關。
輸入.txt文件的內容如下:
511+93/2-932/-149657%/*-+14+96*5/7%-149-+6*57%/
和預期的輸出結果是:
5
2
1
8
-4
2
-4
這是所有我的代碼至今:
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class postfixEvaluater {
public static void main(String[] commandlineArguments) {
//Error Checking
if(commandlineArguments.length == 0){
System.out.println("Please enter the file name.");
}
else{
postfixEvaluater.readFromTheFile(commandlineArguments[0]);
}
}
public static void readFromTheFile(String fileName) {
//connect to file
File file = new File(fileName);
Scanner scanFile = null;
try {
scanFile = new Scanner(file);
}
catch (FileNotFoundException exception) {
System.out.print("File not found for " + fileName);
System.exit(1);
}
while (scanFile.hasNextLine()) {
String line = scanFile.nextLine();
Integer postfixLine = postfixEvaluater.postfixEvaluation(line);
System.out.println(postfixLine);
}
}
public static Integer postfixEvaluation(String input){
StackInterface<Integer> stack = new LinkedStack<Integer>();
Integer result = new Integer(0);
for(int i=0;i<input.length();i++){
String characterNum = input.substring(i, i+1);
Integer integer1 = new Integer(0);
Integer integer2 = new Integer(0);
Integer character = (Integer.valueOf(characterNum));
if (character.equals("0")) {
stack.push(character);
}
else if (character.equals("1")) {
stack.push(character);
}
else if (character.equals("2")) {
stack.push(character);
}
else if (character.equals("3")) {
stack.push(character);
}
else if (character.equals("4")) {
stack.push(character);
}
else if (character.equals("5")) {
stack.push(character);
}
else if (character.equals("6")) {
stack.push(character);
}
else if (character.equals("7")) {
stack.push(character);
}
else if (character.equals("8")) {
stack.push(character);
}
else if (character.equals("9")) {
stack.push(character);
}
else if (character.equals("*")) {
integer2 = stack.pop();
integer1 = stack.pop();
result = integer1 * integer2;
stack.push(result);
}
else if (character.equals("/")) {
integer2 = stack.pop();
integer1 = stack.pop();
result = integer1/integer2;
stack.push(result);
}
else if (character.equals("%")) {
integer2 = stack.pop();
integer1 = stack.pop();
result = integer1 % integer2;
stack.push(result);
}
else if (character.equals("+")) {
integer2 = stack.pop();
integer1 = stack.pop();
result = integer1 + integer2;
stack.push(result);
}
else if (character.equals("-")) {
integer2 = stack.pop();
integer1 = stack.pop();
result = integer1 - integer2;
stack.push(result);
}
}
return result;
}
}
這裏是我的代碼,我覺得問題所在的部分(順便說一句,我推,並彈出什麼,但整數):
public static Integer postfixEvaluation(String input){
StackInterface<Integer> stack = new LinkedStack<Integer>();
Integer result = new Integer(0);
for(int i=0;i<input.length();i++){
String characterNum = input.substring(i, i+1);
Integer integer1 = new Integer(0);
Integer integer2 = new Integer(0);
Integer character = (Integer.valueOf(characterNum));
if (character.equals("0")) {
stack.push(character);
}
else if (character.equals("1")) {
stack.push(character);
}
else if (character.equals("2")) {
stack.push(character);
}
else if (character.equals("3")) {
stack.push(character);
}
else if (character.equals("4")) {
stack.push(character);
}
else if (character.equals("5")) {
stack.push(character);
}
else if (character.equals("6")) {
stack.push(character);
}
else if (character.equals("7")) {
stack.push(character);
}
else if (character.equals("8")) {
stack.push(character);
}
else if (character.equals("9")) {
stack.push(character);
}
else if (character.equals("*")) {
integer2 = stack.pop();
integer1 = stack.pop();
result = integer1 * integer2;
stack.push(result);
}
else if (character.equals("/")) {
integer2 = stack.pop();
integer1 = stack.pop();
result = integer1/integer2;
stack.push(result);
}
else if (character.equals("%")) {
integer2 = stack.pop();
integer1 = stack.pop();
result = integer1 % integer2;
stack.push(result);
}
else if (character.equals("+")) {
integer2 = stack.pop();
integer1 = stack.pop();
result = integer1 + integer2;
stack.push(result);
}
else if (character.equals("-")) {
integer2 = stack.pop();
integer1 = stack.pop();
result = integer1 - integer2;
stack.push(result);
}
}
return result;
}
這個例外很明顯。在你的postfixEvaluation方法中,你試圖將「+」號轉換爲int – DeiAndrei 2015-03-03 07:50:15
@DeiAndrei所以所有的操作符都應該是Strings? – CMcorpse 2015-03-03 07:51:46
操作數是整數(或任何數字類型),但運算符(+ - * /)不是。 – DeiAndrei 2015-03-03 07:53:22