gpt4 book ai didi

java - 如何创建一个反转给定字符串的迭代器?

转载 作者:行者123 更新时间:2023-12-02 02:05:56 25 4
gpt4 key购买 nike

我正在尝试用 Java 创建一个“反向迭代器”,它接受一个字符串并以相反的顺序输出每个字符串。这是我现在的代码:

//a b c d -> d c b a
class ReverseIterator implements Iterator<String> {
String given;
int index;
ReverseIterator(String given) {
this.given = given;
this.index = 0;
}

// is there a next?
public boolean hasNext() {
return this.index <= this.given.length();
}

// gets the next item
// effect: advances the index by one
public String next() {
String answer = this.given.substring(given.length() - this.index, given.length() - this.index - 1);
this.index = index + 1;
return answer;
}
}

我得到一个字符串索引超出范围:-1,但我不确定如何修复我的算法以使其正常工作。

最佳答案

所以有两件事是错误的。

第一return this.index <= this.given.length();当到达最后一个字符时会产生错误,如 String为零索引,即 0length - 1

第二

this.given.substring(given.length() - this.index, given.length() - this.index - 1);

生成一个索引范围,其中 endIndex小于beginIndex (因此出现错误 String index out of range: -1 )

所以,如果 index是 5,您正在尝试获取从 5 开始的子字符串并结束于4 ,这是无效的。你想要改变它们,更像是......

public String next() {
int from = given.length() - this.index - 1;
int to = given.length() - this.index;
String answer = this.given.substring(from, to);
this.index = index + 1;
return answer;
}

其中大部分是通过一系列 System.out.println 进行调试的声明,当您开始遇到这样的问题时,花时间分解变量(就像我上面所做的那样)并检查实际值,这非常重要,这对于突出显示我们都犯的愚蠢错误非常有帮助

哦,我也同意String#charAt似乎更有意义

关于java - 如何创建一个反转给定字符串的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50806687/

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