#java
#java
Вопрос:
Я хотел бы реализовать свой StringStack в операторе switch, как я могу заставить это работать на Java. это говорит о том, что я не могу нажать () и аргумент со значением символа. Каков наилучший способ обойти это для моего метода проверки?
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;
}
}
Комментарии:
1. ваша функция
public String[] validate(String xmlDocument);
возвращает null, но она должна возвращать массив строк, а вашint charIndex = 0;
не увеличивается, и у вас есть массив строк и ваш вводимый символ в нем2. Я еще не закончил код. Я просто хочу знать, как указать значение моего символа.
3. используете ли вы StringStack из apache: [ссылка] commons.apache.org/proper/commons-collections/javadocs /…
4. @AdaLovelace если какой-либо из приведенных ниже ответов вам помог, рассмотрите возможность их голосования. Если кто-то ответил на ваш вопрос, вы можете пометить его как ответ зеленой галочкой.
Ответ №1:
У вас есть текущий символ, хранящийся в строке characterString = Character.toString(currentCharacter);
, просто используйте его для вставки в стек.
StringStack.push(currentCharacter);
change to
StringStack.push(currentString);
Комментарии:
1. это была моя логика, поэтому я создал символьную строку, но при этом я получаю ошибку компиляции, потому что она хочет, чтобы я изменил свой метод push() на статический метод, чего я не могу сделать, потому что у меня есть j-модульный тестер, который я должен передать. есть ли какой-либо другой вариант
2. Попробуйте изменить свой метод push, чтобы получить аргумент в качестве символа.
3. Я не могу, потому что это должен быть StringStack
Ответ №2:
Ваша проблема именно такова, как ее описывает Java. Вы char
передаете a методу, который ожидает String
. Лучшим решением было бы
Stringstack.push(characterString);
Кроме того: поскольку switch позволяет вам провалиться, вы можете переписать его как
switch (currentCharacter) {
case '(':
case '[':
case '{':
case ')':
case ']':
case '}':
StringStack.push(characterString);
break;
}
Далее в сторону: я не рассматривал другие потенциальные проблемы в коде, а стремился только ответить на заданный вопрос.
Комментарии:
1. Stringstack.push(новая строка(текущий символ));
2. Я не понимаю этот код и то, куда он идет, это не исправляет
3. В коде уже есть
characterString = Character.toString(currentCharacter);
— просто нажмите это4. StringStack.push(символьная строка);
5. я не могу этого сделать, потому что он хочет, чтобы я изменил свой push на static, что испортит мою программу hole, потому что я должен использовать j-модульный тестер, который не позволит