2015-08-31 36 views
0

我正在写一个scala函数来检查平衡括号。所以"()","([]{})"都是平衡的,但")","(){[}]"不平衡斯卡拉代码来检查括号是否平衡

下面是我写的应该工作的代码。我不知道为什么它对我尝试的所有输入都是错误的。

package general 

import scala.collection.mutable.Stack 
import scala.collection.immutable.HashMap 

object BalanceParen { 
    def main(args: Array[String]) { 
     print(isBalanced("()")); 
    } 
    def isBalanced(input: String): Boolean = { 
     val stack = new Stack[Char] 
     val brace = HashMap('(' -> ')', '[' -> ']', '{' -> '}') 

     input map ((ch: Char) => { 
      if(brace contains ch) stack push ch 
      else { 
       if(brace.isEmpty)    return false 
       if(brace.get(stack.pop) != ch) return false 
      } 
     }) 
     return stack.isEmpty 
    } 
} 
+0

在之前的评论:

if(brace.get(stack.pop) != Some(ch)) return false 

或忽略'brace.get(stack.pop)'**但是**'brace.isEmpty'看起来应该是'stack.isEmpty '...但这不应该是你的函数背后的错误一直返回'false' – olydis

+0

你的代码**对我来说顺手! – olydis

+0

这很奇怪,你有没有试过其他的输入法,例如'')))“,”(){}(]“,”({}(])“'? –

回答

2

HashMapget方法返回一个Option,使您的测试需要改变的东西,如:我完全

if(brace.get(stack.pop).contains(ch)) return false 
+0

我很愚蠢,我修复了第二个我复制他的代码到我的IDE并忘记关于它......你值得拥有那一个:D – olydis

+0

确实!那解决了我的问题:)我不太了解scala选项是如何工作的,将会对此进行了解。感谢你,也感谢你,olydis –

0
package com.java.run; 

public class Traversetwoside { 
    public static void main(String[] args) { 

     String s = "{<()>}"; 
     boolean istrue = true; 

     int i, j = 0; 
     for (i = 0, j = s.length() - 1; i <= j; i++, j--) { 

      // a=s.charAt(i); 

      if (s.charAt(i) == '{') { 
       if (s.charAt(j) != '}') { 

        istrue = false; 
        System.out.println("istrue =false"); 
        break; 
       } 
      } 
      else if (s.charAt(i) == '<') { 
       if (s.charAt(j) != '>') { 
        istrue = false; 
        System.out.println("istrue =false"); 
        break; 
       } 
      } 
      else if (s.charAt(i) == '(') { 
       if (s.charAt(j) != ')') { 
        istrue = false; 
        System.out.println("istrue =false"); 
        break; 
       } 
      } 
      istrue =true; 
      System.out.println("istrue =true"); 
     } 
    } 
} 
+1

不知道这是为了回答,但我不认为它是这样,当它的原始问题是关于一个算法的Scala实现时,它可能是用Java编写的,你可能会如果你在这里留下这个问题,你可以下降 –