我正在编写一个程序,以递归方式在字符串中搜索字母A,T,C或G.使用Pattern和Matcher将字符串的第一个字母与正则表达式进行比较。如果第一个字母匹配,则会再次调用递归函数,但会剪切已匹配的第一个字母。
示例中的ATTAFCG之类的序列应该立即返回false并在其到达F后停止检查其余部分,但我发现它确实停在那里但返回仍然是真值。我的控制台输出是:
Value to return: true Where the letter is: A
Value to return: true Where the letter is: T
Value to return: true Where the letter is: T
Value to return: true Where the letter is: A
Status: true
即使在m.find()返回false后强制返回false,最终返回值仍为true。我究竟做错了什么 ?是否在到达错误的字母时递归返回并最后使用第一个字母的值(true)?以下是使用过的代码:
public static void main(String[] args) {
String sequence = "ATTAFCG";
boolean found = recursive(sequence);
System.out.println("Status: " + found);
}
public static boolean recursive(String input) {
boolean returnValue = true;
String pattern = "^[ATGC]*$";
Pattern r = Pattern.compile(pattern);
String[] list = input.split("");
Matcher m = r.matcher(list[0]);
if (input.length() > 1) {
if (m.find() == true) {
recursive(input.substring(1));
} else if (m.find() == false) {
returnValue = false;
return returnValue;
}
} else if (m.find() == true) {
returnValue = true;
} else if (m.find() == false) {
returnValue = false;
return returnValue;
}
System.out.println("Value to return: " + returnValue + " Where the letter is: " + list[0]);
return returnValue;
}
答案 0 :(得分:0)
试试:
//...
if (input.length() > 1) {
if (m.find() == true) {
returnValue = recursive(input.substring(1));
} else if (m.find() == false) {
returnValue = false;
return returnValue;
}
//...
问题是,一旦递归调用该方法,就不要将returnValue
设置为其结果(您应该这样做)
另外我宁愿翻转代码中的逻辑,我认为将布尔值初始化为true