Так что я делаю программу, которая оценивает постфиксное выражение из файла. Однако я продолжаю получать сообщение об ошибке:Оценка Postfix с помощью ошибки стеков (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
@DeiAndrei. Итак, все операторы должны быть строками? – CMcorpse
Операнды - это ints (или любой числовой тип), но операторы (+ - * /) - нет. – DeiAndrei