2016-10-18 10 views
0

switch文でStringStackを実装したいのですが、どのようにすればjavaで動作させることができますか?それは私がプッシュ()とchar値で引数を取ることはできません。私の妥当性検査法のためにこれを取り巻く最善の方法は何ですか?switch文を使用して文字列スタックを実装するにはどうすればよいですか?

package xmlvalidator; 

public class BasicXmlValidator implements XmlValidator { 


    @Override 
    public String[] validate(String xmlDocument) { 
     // TODO Auto-generated method stub 

     int charIndex = 0; 
     char currentCharacter; 
     String characterString; 


     while (charIndex < xmlDocument.length()) { 
      currentCharacter = xmlDocument.charAt(charIndex); 
      characterString = Character.toString(currentCharacter); 

      switch (currentCharacter) { 
      case '(': StringStack.push(currentCharacter); 
       break; 
      case '[': StringStack.push(currentCharacter); 
      break; 
      case '{': StringStack.push(currentCharacter); 
      break; 
      case ')': StringStack.push(currentCharacter); 
      break; 
      case ']': StringStack.push(currentCharacter); 
      break; 
      case '}': StringStack.push(currentCharacter); 
      break; 

      } 
     } 


     return null; 
    } 

} 




package xmlvalidator; 

import static java.lang.System.*; 

public class BasicStringStack implements StringStack { 

    public int count; // Number of Items in the array 

    public String[] stackItems; // The array that holds the stack items 


    public BasicStringStack(int initialSize) { 
     count = 0; 
     stackItems = new String[initialSize]; 
    } 


    @Override 
    public void push(String item) { 
     // TODO Auto-generated method stub 

     if (count == stackItems.length) { 
      int newLength = (stackItems.length + 1); 
      String[] tempArray = new String[newLength]; 
      arraycopy(stackItems, 0, tempArray, 0, stackItems.length); 
      stackItems = tempArray; 
     } 

     stackItems[count++] = item; 


    } 


    @Override 
    public String pop() { 

     if (count == 0) { 
      return null; 
     } else { 
      return stackItems[--count]; 
     } 


    } 


    @Override 
    public String peek(int position) { 

     if ((position > count - 1) || (position < 0)) { 
      return null; // outside Bounds 
     } else { 
      return stackItems[count - position - 1]; 
     } 

    } 


    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return count; 
    } 

} 
+0

あなたの関数は '公共String []型のvalidate(文字列のXmlDocument);' nullを返しますが、それは文字列配列を返すことになって、あなたの 'int型charIndexの= 0;'インクリメントされないと、あなたは文字列配列とあなたを持っています文字を押してください –

+0

私はまだコードを完成havnt。私は自分のキャラクターの価値を押し出す方法を知りたいだけです。 –

+0

あなたはapacheのStringStackを使用していますか?[link] https://commons.apache.org/proper/commons-collections/javadocs/api-2.1.1/org/apache/commons/collections/StringStack.html [link] –

答えて

0

あなたの問題は、Javaがあなたにそれを説明するとまったく同じです。 charを、Stringが必要なメソッドに渡します。最高の修正は別として

Stringstack.push(characterString); 

次のようになります。スイッチは、あなたが通って落下することができますので、あなたはまた、脇

switch (currentCharacter) { 
    case '(': 
    case '[': 
    case '{': 
    case ')': 
    case ']': 
    case '}': 
    StringStack.push(characterString); 
    break; 
} 

としてそれを書き換えることができます:私は、潜在的な他のないアドレスでしたコード内の問題は、しかし、尋ねられた質問にのみ対処することを求めた。

+0

Stringstack.push(新しい文字列(currentCharacter)); –

+0

そのコードを理解していないとどこに行くのですか? –

+1

コードには既に 'characterString = Character.toString(currentCharacter);'があります - それをプッシュします –

1

characterString = Character.toString(currentCharacter);を使用して文字列に格納されている現在の文字をスタックに挿入するだけです。

StringStack.push(currentCharacter); 

change to 

StringStack.push(currentString); 
+0

それは私のロジックthatsなぜ私は文字列を作ったが、私は私が私が持っているajユニットテスターを持っているので、私は私が行うことはできません静的メソッドに私のpush()メソッドを変更したいので、私はそれを行うときにコンパイルエラーを取得パス。他のオプションがあります –

+0

引数を文字として取得するようにプッシュメソッドを変更してみてください。 –

+0

それはStringStackでなければならないので私は傾ける –

関連する問題