【问题标题】:if/for loop conditioning for multiple strings多个字符串的 if/for 循环条件
【发布时间】: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


【解决方案1】:

我希望我理解正确。这里有两种方法:

1:

if (onp.charAt(i) == '*' || onp.charAt(i) == '+' || ...) { // all your operators
//B
}

2:

private static final Set<String> operators = new HashSet<String>(Arrays.asList("*", "+", "-")); // all your operators

        String c = "*";
        if (operators.contains(c)) {
            // B
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2019-11-21
    • 2015-08-24
    相关资源
    最近更新 更多