我有以下代码:
int t = s.length()-1;
int g = 0;
for (int i=0; i < s.length(); i++){
if (s.charAt(i) != h.charAt(t--));
g++;
}
if (g==0)
return true;
else
return false;
基本上这个代码假设要测试字符串h的inverse是否等于string s,反之亦然。由于某种原因,总会返回“假” - 尽管明显的答案是正确的。
任何人都可以告诉我我的代码有什么问题吗?
谢谢!
答案 0 :(得分:8)
我会说额外的;
是罪魁祸首。
而不是
if (s.charAt(i) != h.charAt(t--));
使用
if (s.charAt(i) != h.charAt(t--))
你应该总是走“安全”的路线。也就是说,在 if-else 语句之后使用大括号(几乎可以在任何地方使用它们),所以这样的错误不会发生在第一位。写它的正确方法是:
if (s.charAt(i) != h.charAt(t--)) {
g++;
}
顺便说一句,如果您不先检查s
和h
是否具有相同的长度,您的代码就会爆炸。
答案 1 :(得分:3)
;
中的额外if (s.charAt(i) != h.charAt(t--));
可能会产生问题
使用
if (s.charAt(i) != h.charAt(t--))
{
g++;
break; // if not match, not need to continue with loop
}
答案 2 :(得分:1)
除非这是一个学习练习,否则我建议你不要自己编写循环并使用一些库代码。你可以这样做:
String s = "abcd";
String h = "dcba";
System.out.println( h.equals( new StringBuffer(s).reverse().toString() ) );
在引擎盖下,这些循环穿过字符串的方式与您正在进行的方式非常相似。代码在AbstractStringBuilder,如果你想看看。
答案 3 :(得分:0)
如果没有相同的字符,请使用break;
退出循环
bool g = true;
for(.....)
{
if (s.charAt(i) != h.charAt(t--))
{
g = false;
break;
}
}
return g;
它会提高你的表现