スペースで区切られたユーザー入力を読み込み、その値をツリーに挿入しようとしています。私は2桁の整数があるまですべてが正しく動作しています。それは、最初に両方を読んでツリーに2桁の整数を挿入したいときに、各整数のcharを読み込んでツリーに挿入しているようです。スペースで区切ってツリーに挿入するJavaの読み込み
e、g。ユーザーが10 3 + 7 *を入力すると、最初に10が挿入され、0が挿入されます。これは10を挿入します(これは、 EQN)ここで
は、私がこれまで持っているものです。私のメインクラスで
私buildTree方法で
public static void main(String [] args){
Scanner scan = new Scanner(System.in);
ExpressionTree et = new ExpressionTree();
System.out.println("\nEnter equation: ");
et.buildTree(scan.nextLine());
}
..
public void buildTree(String eqn){
for(int i = 0; i <= eqn.legnth()-1; i++)
insert(eqn.charAt(i)); //how to insert 10 instead of 1 and then 0??
}
私はに問題があることを知っています私のbuildTreeメソッドが、私はいいえ
package expressiontreetest;
import java.util.Scanner;
class ExpressionTree {
class TreeNode {
char data;
TreeNode left, right;
/** constructor **/
public TreeNode(char data) {
this.data = data;
this.left = null;
this.right = null;
}
}
class StackNode {
TreeNode treeNode;
StackNode next;
public StackNode(TreeNode treeNode) {
this.treeNode = treeNode;
next = null;
}
}
private static StackNode top;
public ExpressionTree() {
top = null;
}
public void clear() {
top = null;
}
private void push(TreeNode ptr) {
if (top == null) top = new StackNode(ptr);
else {
StackNode nptr = new StackNode(ptr);
nptr.next = top;
top = nptr;
}
}
private TreeNode pop() {
if (top == null) throw new RuntimeException("Underflow");
else {
TreeNode ptr = top.treeNode;
top = top.next;
return ptr;
}
}
private TreeNode peek() {
return top.treeNode;
}
private void insert(char val) {
try {
if (isDigit(val)) {
TreeNode nptr = new TreeNode(val);
push(nptr);
}
else if (isOperator(val)) {
TreeNode nptr = new TreeNode(val);
nptr.left = pop();
nptr.right = pop();
push(nptr);
}
}
catch(Exception e) {
System.out.println("Invalid Expression");
}
}
//if it is a valid digit return true
private boolean isDigit(char ch) {
return ch >= '0' && ch <= '9';
}
//if it is a valid operator return true
private boolean isOperator(char ch) {
return ch == '+' || ch == '-' || ch == '*' || ch == '/';
}
private int toDigit(char ch) {
return ch - '0';
}
//starting from index 0 increment the index after char has been inserted into the tree
//and terminate the for loop once we have reached equation legnth
public void buildTree(String eqn) {
// String [] eqnSubparts = eqn.split(" ");
// System.out.print("\neqnSubparts: " + eqnSubparts);
for (int i = 0; i <= eqn.length() - 1; i++) {
// System.out.print("\neqnSubparts: " + eqnSubparts[i]);
insert(eqn.charAt(i));
}
}
public double evaluate() {
return evaluate(peek());
}
public double evaluate(TreeNode ptr) {
if (ptr.left == null && ptr.right == null) return toDigit(ptr.data);
else {
double result = 0.0;
double left = evaluate(ptr.left);
double right = evaluate(ptr.right);
char operator = ptr.data;
//switch statment for oper
switch (operator) {
case '+':
result = left + right;
break;
case '-':
result = left - right;
break;
case '*':
result = left * right;
break;
case '/':
result = left/right;
break;
default:
result = left + right;
break;
}
return result;
}
}
}
/** class ExpressionTreeTest **/
public class ExpressionTreeTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System. in);
System.out.println("Expression Tree Test");
/** make object of ExpressionTree **/
ExpressionTree et = new ExpressionTree();
System.out.println("\nEnter equation in prefix form");
//String line = scan.nextLine();
//System.out.print("First digit : " + line);
et.buildTree(scan.nextLine());
System.out.print("\nInput : ");
System.out.println("\n\nEvaluated Result : " + et.evaluate());
}
}
はい私のユーザ入力にはスペースがあり、1桁の数字だけを入力するとプログラムはうまく動作します – kkmoslehpour
質問が更新され、私のフルコードが追加されました。 – kkmoslehpour
質問に答えてください。私は投票しましたが、答えはありません。 – kkmoslehpour