所以我正在制作一个程序来评估文件中的后缀表达式。但我不断收到错误:使用堆栈错误的后缀评估(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