私は今スタックを学んでいます。私のコードはコンパイルされています。実行すると、コードはデバッグの println とエラーを出力しません
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2760)
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.Vector.ensureCapacityHelper(Vector.java:226)
at java.util.Vector.addElement(Vector.java:573)
at java.util.Stack.push(Stack.java:50)
at stacks.main(stacks.java:56)
表示されています。
私のコードは次のようになります:
import ch03.stacks.*;
import java.util.*;
public class stacks {
public static void main (String []args){
System.out.printf("Enter a math equation in reverse polish notation:\n");
Stack<Double> pemdas = new Stack<Double>();
Scanner input = new Scanner(System.in);
String in = input.next();
double temp1, temp2, resultant = 0;
while(input.hasNext()){
if(in == "+"){
temp1 = pemdas.peek();
pemdas.pop();
temp2 = pemdas.peek();
pemdas.pop();
resultant = temp1 + temp2;
pemdas.push(resultant);
System.out.println(resultant);
}
if(in == "-"){
temp1 = pemdas.peek();
pemdas.pop();
temp2 = pemdas.peek();
pemdas.pop();
resultant = temp1 - temp2;
pemdas.push(resultant);
System.out.println(resultant);
}
if(in == "*"){
temp1 = pemdas.peek();
pemdas.pop();
temp2 = pemdas.peek();
pemdas.pop();
resultant = temp1 * temp2;
pemdas.push(resultant);
System.out.println(resultant);
}
if(in == "/"){
temp1 = pemdas.peek();
pemdas.pop();
temp2 = pemdas.peek();
pemdas.pop();
resultant = temp1 / temp2;
pemdas.push(resultant);
System.out.println(resultant);
}
else
pemdas.push(Double.parseDouble(in));
System.out.println(resultant);
}
System.out.println("Answer:"+ resultant);
}
}
したがって、最初に逆ポーランド記法で整数の文字列を読み取り、それがオペランドでない場合はスタックにポップします。少なくとも私はそれがやっていると思います。どんな助けでも大歓迎です。