Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编码bat和eclipse的不同结果_Java_Eclipse - Fatal编程技术网

Java 编码bat和eclipse的不同结果

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

我正在为Java做编码bat练习,遇到了一个问题,eclipse返回正确的值,而编码bat环境却没有。 我正在研究的问题是:

给定一个字符串和一个非空的子字符串sub,如果该字符串中的某个位置出现至少n个sub副本,则递归计算,可能存在重叠。N将是非负的

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。