Her bir döngüde yuvarlandığında, ")" nin her bittiğinde yeni bir ağaç oluşturarak ve bu işleçleri/işlenenleri bir yığının içine geri alınacak bir yığına iterek, bir ikili ağacın içine bir ifade yapıyorum ikili ağaç.İkilik Ağaç Oluşturma
Benim Yapı Yöntem:
package lab5;
import net.datastructures.*;
public class Expression<T> {
/** Contain Linked Tree and Linked Stack instance variables **/
LinkedBinaryTree<T> tree;
LinkedStack<LinkedBinaryTree<T>> stack;
public Expression() {
tree = new LinkedBinaryTree<T>();
stack = new LinkedStack<LinkedBinaryTree<T>>();
} // end constructor
public LinkedBinaryTree<T> buildExpression (String expression) {// LinkedBinaryTree<T> is a type of LinkedBinaryTree
// major TODO to implement the algorithm]
LinkedBinaryTree<T> operand, op1, op2;
LinkedStack<LinkedBinaryTree<T>> newStack = new LinkedStack<LinkedBinaryTree<T>>();
String symbol;
int i = 0;
int len = expression.length();
for (i = 0; i < len; i++) {
symbol = expression.substring(i, i+1);
if ((!symbol.equals ("(")) && (!symbol.equals (")"))) {
operand = new LinkedBinaryTree<T>();
operand.addRoot((T)symbol);
newStack.push(operand);
} else if (symbol.equals ("(")){
continue;
} else {
op2 = newStack.pop();
operand = newStack.pop();
op1 = newStack.pop();
tree.attach(operand.root(), op1, op2);
newStack.push(tree);
}
}
tree = newStack.pop();
return tree;
} // end method buildExpression
}
Benim Testi:
package lab5;
import net.datastructures.*;
public class ExpressionTest {
/**
* @param args
* @throws EmptyTreeException
*/
/** Paranthesize is code fragment 8.26 pg. 346 **/
/** evaluateExpression method apart of LinkedBinaryTree class in net.datastructures **/
public static void main(String[] args) {
// declare local variables/objects
String s = new String();
String exp = "((((3+1)x3)/((9-5)+2))-((3x(7-4))+6))"; //-13
Expression<String> expression = new Expression<String>();
// print the expression string
System.out.printf ("The original Expression String generated via printf: %s", exp);
// create the tree using the 'stub' method
// i.e. it does nothing
LinkedBinaryTree<String> tree = expression.buildExpression (exp);
// use Object.toString simply to print its reference
System.out.printf ("\n\nThe Tree: %s\n", tree);
}
}
Bir NullPointerException alıyorum ve nedenini bilmiyorum. 'Denemeye' ihtiyacım var mı ve hatanın geçmesine izin mi vereyim?
Bir hata ayıklayıcısını, nerede ve neden hatalı olduğunu kontrol etmek için kullanmalısınız. – ekeith
Ağacın kökü nedeniyle uygulamanın akışını askıya alıyor. Bir LinkedBinaryTree.class içinde t1.root.setParent (düğüm) sonra benim LinkedBinaryTree nesne başlatımı kapmak için kullanıyorum sonra durur. Bu, kitabın im okuma kitabının yazarı tarafından sağlanan bir net. Kitapta addRoot (element) kullanırsam, ağacın boş olmaması durumunda bir hata oluşur. –
Bu hatayı yakalamak için koşulları ayarlıyor musunuz? eğer sen bunu addRoot (element) metodunda söyleyemezsen eğer (root == null) {// addRootElement;} else {// zaten bir root olduğunu gösteren bir hata mesajı döndürür ' – ekeith