public static void isMatchHelper(String input, String pattern, boolean ret){
if(pattern.length() == 0 && input.length() == 0){
ret = true;
}
else if(pattern.length() == 0){
ret = false;
}
else if(input.length() == 0){
ret = true;
}
if(pattern.length() == 0 || input.length() == 0){
return;
}
else if(pattern.charAt(0) == input.charAt(0)){
isMatchHelper(input.substring(1), pattern.substring(1), ret);
}
if(pattern.charAt(0) == '.'){
isMatchHelper(input, pattern.substring(1), ret);
}
if(pattern.charAt(0) == '*'){
if(pattern.length() > 1){
int countMatches = 0;
char compareWith = pattern.charAt(countMatches + 1);
while( countMatches != input.length() && input.charAt(countMatches) == compareWith){
countMatches++;
}
isMatchHelper(input.substring(countMatches), pattern.substring(2), ret);
}
else{
ret = true;
}
}
if(pattern.charAt(0) != input.charAt(0)){
isMatchHelper(input, pattern.substring(1), ret);
}
}
Ive попробовал вход, где он вводит первый вход, а ret - true, но опять же, значение ret, когда я проверяю его, все равно false. Я знаю, что это, вероятно, связано с передачей по значению, я пытался передать Boolean Object и с помощью Boolean.FALSE или Boolean.TRUE, который не работал. Я передал логический массив с 1 параметром, и это сработало.
Мой вопрос в настоящее время более или менее концептуальен, чтобы улучшить мое понимание, я хотел бы знать, почему логическое не работает так, как планировалось. Является ли это проблемой по стоимости или что-то еще? Должен признаться, в какой-то момент я думал, что использование Boolean vs boolean может быть исправлением.
Я с нетерпением жду вашей помощи.
Поскольку это Java, вы не можете передавать параметр по ссылке.
Вместо этого просто верните значение из метода.
public static boolean isMatchHelper(String input, String pattern) {
boolean ret;
.... // Rest of your code
.... // Replace all return statements with return ret;
return ret;
}
Чтобы быть ясным, поскольку функция рекурсивна, вы можете изменить рекурсивные вызовы точно так же, как вы будете менять нерекурсивные вызовы:
Эта строка
isMatchHelper(input, pattern.substring(1), ret);
Становится этой строкой:
ret = isMatchHelper(input, pattern.substring(1));
bool
примитивен, поэтому создается копия значения параметра. Я думаю,java.lang.Boolean
также не поможет, так как он неизменен, лучше всего изменить способ, которым вы написали функцию, используя возвращаемые значения вместо параметра