【发布时间】:2017-06-04 14:04:23
【问题描述】:
我正在编写一个程序来使用以下程序删除字符串中的连续重复字符:
static void main(String[] args){
String s = "abcdeedcbfgf";
removeConsecutiveDuplicate(s);
}
static void removeConsecutiveDuplicate(String s) {
String tmp = "";
boolean isEligible = false;
for (int i = 0; i < s.length() - 1; i++) {
if (s.charAt(i) == s.charAt(i + 1)) {
tmp = s.substring(0, i) + s.substring((i + 2), s.length());
System.out.println(tmp);
s = tmp;
isEligible = true;
break;
}
}
System.out.println("s is:" + s);
while ( isEligible)
removeConsecutiveDuplicate(s);
}
输出应该是:afgf 当没有连续的字符并且它应该停止,因为我在 while 中使用标志。但标志正在获得真正的价值。
不知道效果如何?
有人可以帮助我了解我做错了什么吗?
【问题讨论】:
-
这是因为
isEligible从不改变它首次声明的框架中的值。这将运行多长时间?因为在我看来,你最终会很快用完堆 -
即每次调用
removeConsecutiveDuplicate()时,您都会为isEligible生成一个新范围和一个新值。这个新值将不传回,也不会在您的初始 while 循环中可见 -
main()中的字符串s在调用后将保持不变(当你让它按照需要执行并在之后返回时)。我认为您希望该方法将更改后的s返回给调用者。 -
@CraigR8806 - 但是
while循环是在函数中吗? -
@CraigR8806:即使我从 for 循环中删除标志并将其作为方法参数,它也会进入无限循环..
标签: java string while-loop infinite-loop