为什么j(for)循环不起作用?

时间:2014-06-20 21:28:15

标签: java

如果我写

if(y.charAt(i)==y.charAt(i+1))

然后deleteCharAt()可以工作,但是如果我拿一个j,即

 if(y.charAt(i)==y.charAt(j))

然后它不起作用?

试一试:http://ideone.com/WBtYDA

Scanner s = new Scanner(System.in);
int t = s.nextInt();
t++;
while (t-- > 0) {
    String r = s.next();
    StringBuffer y = new StringBuffer(r);
    try {
        for (int i = 0; i <= r.length(); i++) {
            for (int j = i + 1; j <= r.length(); j++)
                if (y.charAt(i) == y.charAt(j)) {
                    y.deleteCharAt(i);
                }
        }
    } catch (Exception e) {
    }
    System.out.println(y);
}

1 个答案:

答案 0 :(得分:2)

首先,永远不要捕捉并忽略异常。处理它,重新抛出或包裹它。如果您认为不应该发生这种情况,请将其包装在RuntimeException

} catch(Exception e) {
    throw new RuntimeException(e);
}

您的代码中抛出了一个异常,因此您没有看到。 for循环中的两个检查是错误的。

i <= r.length()
j <= r.length()

应该是

i < y.length()
j < y.length()

这是因为length()永远不是有效索引(length() - 1是最后一个有效索引),因为y可能比r短,因为事情可能是除去。

最后,您可能想要考虑删除哪个字符,删除该字符的原因,以及删除后所有字符的索引如何移动。