while布尔值没有终止

时间:2017-01-19 18:30:03

标签: java string while-loop infinite-loop

我正在编写一个程序,使用以下程序删除String中的连续重复字符:

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中使用flag。但是国旗正在变得真正有价值。

我不知道它是怎么做到的?

有人可以帮我理解我做错了什么吗?

2 个答案:

答案 0 :(得分:1)

while循环是while(true)。你永远不会做错。 一旦合格是真的,你就陷入了无限循环。 改变,如果。 while(iseligible)=&gt; if(iseligible)。

答案 1 :(得分:1)

修复方法是从您的方法返回新的String:

static String removeConsecutiveDuplicate(String s) {
    // existing code, except...
    return tmp;
}

然后在调用方法中,检查是否已更改

String s = "abcdeedcbfgf";

while (true) {
    String next = removeConsecutiveDuplicate(s);
    if (next.equals(s))
        break;
    s = next;
}

完全删除isEligible的变量和概念。

此外,您不需要为substring()指定第二个参数,因为如果省略“to end of String”,则为:

s.substring(i, s.length())

相同
s.substring(i);