【发布时间】:2014-05-21 02:35:47
【问题描述】:
我是 Java 新手,对编程也比较陌生。在上面的代码中,我只需要添加某种条件来检查 c 字符串是否包含以下值之一:(*,/,+,-,(,),^),然后继续其余的说明(来自标记为“B”的代码中的位置)
论坛上的其他相关问题没有帮助;也许我正在寻找错误的工具来完成此任务。除了对我感兴趣的每个值使用 if 和复制 B 部分之外,我不知道该怎么做(我必须承认,这不是很优雅的方式;))
非常感谢您的帮助!
private static void convertOnpToInf(String onp) {
Stack stack = new Stack();
try {
for (int i=0; i<onp.length(); i++) {
String c = String.valueOf( onp.charAt(i) );
if (c.matches("[a-z]+")) {
stack.push(c);
//B段
} else {
if (stack.isEmpty()) {
throw new Exception("error");
}
String a = stack.pop();
if (stack.isEmpty()) {
throw new Exception("error");
}
String b = stack.pop();
if ( addBracket(convertToOperator(c), onp, i) ) {
stack.push("(" + b + c + a + ")");
} else {
stack.push( b + c + a );
}
【问题讨论】:
-
你能再解释一下这段代码吗?为什么要弹出堆栈两次?
-
它是更大程序的一部分(
到 转换器) - 两次弹出堆栈是算法的一部分,但我认为这与我的问题无关 -
如果您需要
c等于*,/,+,-,(,),^,为什么要匹配a-z中的至少一个字符? -
a-z 字符无需其他指令即可进入堆栈。另一方面,操作符(*,/,...) 必须经过 b 部分才能在转换器中正常运行
标签: java string loops conditional-statements