我正忙着为学校制作一个表达式树,我已经构建了制作树的部分,并且打印算术表达式的结果也可以工作。
有这个额外的部分来完成作业,我也想让它工作。额外的赋值使程序能够读取表达式。
我对这个已经很了解了,但我不确定我是否以一种好的方式将数字放在 int 的末尾来编码这个东西。我试图解决的问题是当有这样的表达式时......
(3*(8-2))+(12/4)
...我如何从字符数组中取出 12,因为它们是两个分开的字符?我在代码的其余部分中使用了字符数组,但当然可以使用字符串来获取两个字符。
我是这样做的:
// 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);
}
但是看起来很草率。我用谷歌搜索了很长时间,我发现的只是这种方式,但我无法想象没有更简单或至少不那么马虎的方式。你们知道更好的方法还是这就是要走的路?
我构建的解决方案是解决表达式树问题的相对简单的方法,我可以进一步解决它,但我不想花更多的时间,只要我可以向老师展示我明白了教训。它的类(class)是算法,所以它并不是真正的学习Java,我的意思是我不是在要求老师要求我解决的问题的解决方案。
提前谢谢您!
最佳答案
您可以逐位构建数字(伪代码):
number = 0
for each digit {
number = number * 10 + value_of(digit)
}
这将产生 number
作为以 10 为基数的数字字符串(从左到右)的值。
在您的情况下:数字=(1,2)
number = 0
number = number * 10 + 1 // <= number = 0*10+1=1
number = number * 10 + 2 // <= number = 1*10+2=12
关于java - 如何将数字放在 int 的末尾(而不是求和)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7585160/