gpt4 book ai didi

java - "Find substring in char[]"得到意想不到的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:27:41 24 4
gpt4 key购买 nike

免责声明:这是一道作业题。我正在尝试编写一个 contains(java.lang.String subString) 方法,该方法返回一个 int 值,表示主字符串中比较字符串的索引,对于一个定制的字符串类。

一些规则:

  • 没有集合类
  • java String 类中只允许使用 charAt() 和 toCharArray()(但允许使用其他类中的方法)
  • 假设 length() 返回主字符串的长度(这正是它所做的)

我的代码:

public int contains(java.lang.String subString) {
this.subString = subString;
char[] arrSubStr = this.subString.toCharArray();
//Create initial fail
int index = -1;
//Make sure comparison subString is the same length or shorter than the primary string
if(arrSubStr.length > length()) {
return index;
}
//Steps to perform if initial conditions are met
else {
//Compare first character of subString to each character in primary string
for(int i = 0; i < length(); i++) {
//When a match is found...
if(arrSubStr[0] == this.content[i]) {
//...make sure that the subString is not longer than the remaining length of the primary string
if(arrSubStr.length > length() - i) {
return index;
}
//Proceed matching remainder of subString
else {
//Record the index of the beginning of the subString contained in primary string
index = i;
//Starting with second character of subString...
for(int j = 1; j < arrSubStr.length;) {
//...compare with subsequent chars of primary string,
//and if a failure of match is found, reset index to failure (-1)
if(arrSubStr[j] != this.content[j+i]) {
index = -1;
return index;
}
//If we get here, it means whole subString match found
//Return the index (=i) we set earlier
else {
return index;
}
}
}
}
}
}
return index;
}

测试结果:

主字符串:asdfg
比较字符串:donkey
结果:-1 [通过]

主字符串:asdfg
比较字符串:asdfg
结果:0 [通过]

主字符串:asdfg
比较字符串:g
结果:4 [通过]

主字符串:asasasf
比较字符串:asd
结果:0 [FAIL](应该是-1)

主字符串:asasasf
比较字符串:asf
结果:0 [FAIL](应该是 4)

注释反射(reflect)了代码是如何工作的。然而很明显,当它到达第二个 for 循环时,逻辑会以某种方式分解以给出上述结果。但我看不出问题所在。我可以再看看这个吗?

最佳答案

//If we get here, it means whole subString match found
//Return the index (=i) we set earlier
else {
return index;
}

不幸的是,这个假设是不正确的。如果你到达那里,这意味着两个子串的第二个字符是相同的,因为 if-else语句只会执行一次并且两端都包含一个 return .

既然我已经诊断出问题所在,那么解决这个问题的方法可能很简单,但我想更进一步。我们每天尝试编写代码的方式是一种可维护、可重用和可测试的代码。

这基本上意味着我们这里的函数可以很容易地分成不同的小函数,一个接一个地调用,我们可以为其编写单元测试并接收关于一组逻辑语句是否合适的快速反馈。

关于java - "Find substring in char[]"得到意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54702757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com