2015-08-31 37 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編寫的,你可能會如果你在這裏留下這個問題,你可以下降 –