J
jhjp
Gast
Hallo Leute,
ich bin grad am Verzweifeln! Sitz jetzt glaub ich schon über 10 Stunden an diesem blöden Baum....
Folgende Aufgabe: Ein String der z.b. so aussieht: String s = "((3+4)x(1/2))" soll nun in einen Baum umgewandelt werden, der so aussieht:
x
+ /
3 4 1 2
Mein Problem: er setzt mir die Operanden immer an die falsche Stelle. Und die rechte Seite des Baumes sieht nur bei einfachen Strings korrekt aus zb.(3+2).
Ich bitte um Hilfe... weiß einfach nicht mehr weiter...
und mein Prof meint auch noch, das sei alles gar nicht so schwer *könntihnwürgen*
gruß
beni
Hier mein Code:
Vollständigkeitshalber: Meine Baumklasse:
makeBinTree und operant, rechteSeite stehen in der class BinTree!
Die Node klasse:
So soll dann das Hauptprogramm aussehen:
ich bin grad am Verzweifeln! Sitz jetzt glaub ich schon über 10 Stunden an diesem blöden Baum....
Folgende Aufgabe: Ein String der z.b. so aussieht: String s = "((3+4)x(1/2))" soll nun in einen Baum umgewandelt werden, der so aussieht:
x
+ /
3 4 1 2
Mein Problem: er setzt mir die Operanden immer an die falsche Stelle. Und die rechte Seite des Baumes sieht nur bei einfachen Strings korrekt aus zb.(3+2).
Ich bitte um Hilfe... weiß einfach nicht mehr weiter...
und mein Prof meint auch noch, das sei alles gar nicht so schwer *könntihnwürgen*
gruß
beni
Hier mein Code:
Code:
public BinTree makeBinTree(String s){
if(s.substring(0,1).matches("[0123456789]")){ //Bei Zahl
int i = 0; while(!s.substring(i,i+1).matches("[+-/x]") && !s.substring(i,i+1).equals(")")) i++;
return bin( s.substring(0,i) );
}
if(s.indexOf("(") == 0){
s = s.substring(1);
return bin( makeBinTree(s.substring(0)), operant(s) , makeBinTree(rechteSeite(s)) );
}
return bin("");
}
public String operant(String s){
int i = 0;
if(s.indexOf("+") != -1 && s.indexOf("+") < s.indexOf(")")) i = s.indexOf("+");
if(s.indexOf("-") != -1 && s.indexOf("-") < s.indexOf(")")) i = s.indexOf("-");
if(s.indexOf("x") != -1 && s.indexOf("x") < s.indexOf(")")) i = s.indexOf("x");
if(s.indexOf("/") != -1 && s.indexOf("/") < s.indexOf(")")) i = s.indexOf("/");
return s.substring( i , i+1 );
}
public String rechteSeite(String s){
int i = 0;
if(s.indexOf("+") != -1 && s.indexOf("+") < s.indexOf(")")) i = s.indexOf("+");
if(s.indexOf("-") != -1 && s.indexOf("-") < s.indexOf(")")) i = s.indexOf("-");
if(s.indexOf("x") != -1 && s.indexOf("x") < s.indexOf(")")) i = s.indexOf("x");
if(s.indexOf("/") != -1 && s.indexOf("/") < s.indexOf(")")) i = s.indexOf("/");
return s.substring(i+1);
}
makeBinTree und operant, rechteSeite stehen in der class BinTree!
Code:
public class BinTree {
public Node root;
public BinTree(){
root = new Node(null);
}
public BinTree bin(BinTree a, String t, BinTree b){
BinTree neu = new BinTree();
neu.root.left = a.root;
neu.root.right = b.root;
neu.root.value = t;
return neu;
}
public BinTree bin(String t){
BinTree neu = new BinTree();
neu.root.value = t;
return neu;
}
public static BinTree left(BinTree a){
BinTree neu = new BinTree();
neu.root = a.root.left;
return neu;
}
public BinTree right(BinTree a){
BinTree neu = new BinTree();
neu.root = a.root.right;
return neu;
}
public String value(BinTree a){
return a.root.value;
}
public boolean isEmpty(BinTree a){
if(a.root.value.equals("")) return true;
else return false;
}
}
Code:
public class Node {
String value;
Node left;
Node right;
public Node(String wert){
value = wert;
left = null;
right = null;
}
}
Code:
class test extends BinTree {
public static void main(String[] args){
String s = "((3+4)x(1/2))";
BinTree a = new BinTree();
a = a.makeBinTree(s);
}
}