2011-09-28 50 views
1

我忙于为学校制作一个表达树,我已经构建了构建树的部分,并且打印算术表达式的结果也起作用。
有这额外的部分来完成任务,我只是想做这个工作。额外的任务是让程序能够读取表达式。
我很喜欢这个,但我不确定我是否将这个东西用一个好的方式放在int的末尾。我试图解决的问题是当有这样一个表达式...
(3 *(8-2))+(12/4)
...我如何得到12出来的因为他们是两个分开的字符的字符数组?我在代码的其余部分使用了一系列字符,但当然可以使用字符串来获取这两个字符。如何将数字放在int(不是summming)的末尾?

我就是这么做的:

// if the next character is a digit... 
if (Character.isDigit(expression[i])) { 
    // ... make local variables 'nextNumber'... 
    int nextNumber = 0; 
    // ... and 'a' which already contains this first digit... 
    String a = Character.toString(expression[i]); 
    // ... so when we check for the next character... 
    for (int k = i+1; k < expression.length; k++) { 
     // ... wether it is a digit,... 
     if (Character.isDigit(expression[k])) { 
      // ... we can add that digit to 'a',... 
      a = a + Character.toString(expression[k]); 
     } 
     // ... and if it is not a digit... 
     else if (!Character.isDigit(expression[k])) { 
      // ... we will exit the for loop. 
      break; 
     } 
    } 
    // now we have to change the String to an integer... 
    nextNumber = Integer.getInteger(a); 
    // ... and then we are sure we have the whole number as it was ment to be 
    // in the given expression 
    return new ET(nextNumber); 
} 

但似乎如此草率。我在谷歌搜索了很长时间,我发现的只是这种方式,但我无法想象有没有更容易或至少没有马虎的方式。你们是否知道更好的方法,还是这条路要走?

我构建的解决方案是解决表达式树问题的一种相对简单的方法,我可以更加努力地工作,但我不想花费比需要的更多的时间,只要我可以向老师展示我明白了这些教训。它的课程是Algorithmics,所以它并不是真的关于学习Java,我的意思是我没有要求解决老师要求我解决的问题。

预先感谢您!

回答

2

可以建立由数字(伪码)的数量位:

number = 0 
for each digit { 
    number = number * 10 + value_of(digit) 
} 

这将产生作为number数字串(从左至右)的碱值10

在你的情况下:digits = (1,2)

number = 0 
number = number * 10 + 1 // <= number = 0*10+1=1 
number = number * 10 + 2 // <= number = 1*10+2=12  
+0

我认为这很清楚,但为什么'* 10'? '10点'是什么意思? – Peter

+0

因为通常我们在十进制数字系统中编写数字(也称为base-10位置表示法) – Howard

+0

ahh我现在明白了,你的意思是我从 'number = 0' 开始,当我想给这个数字加1时, 0实际上向左移动,1在“开始”处被添加,并且当我想要添加2时,0和1将移动到左侧并且2被添加。 'number = 0 // <= ____ 0' 'number = number * 10 + 1 // <= ___0_ + 1 - > ___ 01' 'number = number * 10 + 2 // <= __01_ + 2 - > __012' 'print(number); // <=输出:12' – Peter

相关问题