Java 编码bat和eclipse的不同结果
我正在为Java做编码bat练习,遇到了一个问题,eclipse返回正确的值,而编码bat环境却没有。 我正在研究的问题是: 给定一个字符串和一个非空的子字符串sub,如果该字符串中的某个位置出现至少n个sub副本,则递归计算,可能存在重叠。N将是非负的Java 编码bat和eclipse的不同结果,java,eclipse,Java,Eclipse,我正在为Java做编码bat练习,遇到了一个问题,eclipse返回正确的值,而编码bat环境却没有。 我正在研究的问题是: 给定一个字符串和一个非空的子字符串sub,如果该字符串中的某个位置出现至少n个sub副本,则递归计算,可能存在重叠。N将是非负的 strCopies("catcowcat", "cat", 2) → true strCopies("catcowcat", "cow", 2) → false strCopies("catcowcat", "cow", 1) → true
strCopies("catcowcat", "cat", 2) → true
strCopies("catcowcat", "cow", 2) → false
strCopies("catcowcat", "cow", 1) → true
对于strCopies(“iijjj”,“i”,3),我在编码bat中运行的代码返回false,而在eclipse中它返回true。对于所有其他情况,我的代码在eclipse中返回的值与在bat编码中相同。由于我已经在编码bat环境中经历了无法解释的行为,这可能是一个错误吗
我通过以下方式调用该方法:
System.out.println(p.strCopies("iiijjj", "i", 3));
我的代码是:
int count;
public boolean strCopies(String str, String sub, int n) {
if (str.indexOf(sub) != -1) {
count++;
strCopies(str.substring(str.indexOf(sub)+1), sub, n);
}
if (count == n) {
return true;
}
else {
count = 0;
return false;
}
}
这里有一个可能的解决方案
public boolean strCopies(String str, String sub, int n) {
if(str.isEmpty() && n > 0 ) return false;
if(str.isEmpty() && n == 0 ) return true;
if( str.length() >= sub.length() &&
str.substring(0,sub.length()).equals(sub) ){
return strCopies( str.substring(1) , sub , n-1 );
}
return strCopies(str.substring(1) , sub , n);
}
例如,您的代码没有返回(“iijjj”,“i”,2)的正确答案。如果在一行中使用(“iiijjj”,“i”,3)调用两次,则第一次返回true,第二次返回false。所以,基本上,你需要重新思考你的算法。不要使用任何字段。仅限局部变量和返回值。并尽快停止:如果n为0,则您知道答案。如果不是的话,你的目标应该是使n朝着0前进。我在eclipse中尝试了你的建议。使用(“iijjj”,“i”,3),即使有多个调用,我也能实现。可能是因为您重新创建了类的一个新实例,以便再次调用该方法。只需调用
System.out.println(p.strCopies(“iijjj”,“i”,3))代码>两次,您将看到它不会返回两次true。证明:谢谢,您是对的。它不会到达else部分重置计数器,因此在第二次调用中,它将计算为false。