2016-10-18 2 views
0

Я хотел бы реализовать свой StringStack в инструкции switch, как я могу сделать эту работу в java. это sais i can not push() и аргумент с значением 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 (String XMLDOCUMENT);' возвращает нуль, но она должна возвращать массив строк, и ваш 'INT CHARINDEX = 0;' не увеличивается, и у вас есть массив строк и ваш толкающий символ в нем –

+0

Я еще не закончил код. Я просто хочу знать, как подтолкнуть значение моего персонажа. –

+0

Вы используете StringStack для apache: [link] https://commons.apache.org/proper/commons-collections/javadocs/api-2.1.1/org/apache/commons/collections/StringStack.html [ссылка] –

ответ

0

Ваша проблема в том, что Java описывает это для вас. Вы передаете char методу, который ожидает String. Наилучшее решение было бы

Stringstack.push(characterString); 

сторона: потому что переключатель позволяет провалиться, вы можете записать его в виде

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

Далее в стороне: я не адрес другого потенциала проблемы в коде, но искали только для ответа на заданный вопрос.

+0

Stringstack.push (новая строка (currentCharacter)); –

+0

Im не понимая, что код, и где он идет, не исправляет его –

+1

Код уже имеет 'characterString = Character.toString (currentCharacter);' - просто нажмите это –

1

У вас есть текущий символ, хранящийся в строке с использованием characterString = Character.toString(currentCharacter);, просто используйте его для вставки в стек.

StringStack.push(currentCharacter); 

change to 

StringStack.push(currentString); 
+0

Это была моя логика, поэтому я создал characterString, но я получаю ошибку компиляции, когда я это делаю, потому что он хочет, чтобы я изменил свой метод push() на статический метод, который я не могу сделать, потому что у меня есть тестер unit, который я должен проходить. есть ли другой вариант. –

+0

Попробуйте изменить метод push, чтобы получить аргумент как символ. –

+0

Я не могу, потому что это должен быть StringStack –