这就是我到目前为止所拥有的,我花了几个小时的工作才到达这里。我的代码的问题是,如果我给它一个字符串“abcefg”,它将验证前两个字符并将其返回为真。我希望代码为我的所有角色都这样做。我认为将限制设置为 x.length() 可以做到这一点,但由于某种原因,它不起作用。
问问题
238 次
5 回答
1
你在这里有各种各样的问题。
首先,您最终可能会超出charAt(i + 1)
调用范围(检查您的循环条件)。
其次,你怎么可能在 for 循环体中返回 true?你还没有检查所有的字符呢!
不过,我认为您使这变得过于复杂。为了检查两个连续的(即在字符串中彼此相邻)字符是否连续,您需要做的就是
Math.abs(s.charAt(i) - s.charAt(i + 1)) == 1
你实际上甚至不需要演员表。我们正在做的是检查两个字符之间的“距离”是否为 1。
只需将其应用于字符串中的每对连续字符,如果沿线某处不满足,则返回 false。如果您退出循环而不返回 false,则可以返回 true。
于 2013-10-08T22:41:32.157 回答
1
public static boolean ConsecutiveCheckerAscending(String x) {
x = x.toLowerCase();
for (int i = 0; i < x.length() - 1; i++) {
if ((int)x.charAt(i) + 1 != ((int)x.charAt(i + 1)))
{
return false;
}
}
return true;
}
public static boolean ConsecutiveCheckerDescending(String x) {
x = x.toLowerCase();
for (int i = 0; i < x.length() - 1; i++) {
if((int)x.charAt(i) - 1 != ((int)x.charAt(i + 1)))
{
return false;
}
}
return true;
}
于 2013-10-08T22:58:34.530 回答
0
写的很匆忙,但它看起来像这样。-
public static boolean ConsecutiveChecker(String x) {
boolean consecutive = true;
x = x.toLowerCase();
for (int i = 0; i < x.length() - 1; i ++) {
if ((int) x.charAt(i) + 1 != ((int) x.charAt(i + 1))) {
consecutive = false;
break;
}
}
return consecutive;
}
于 2013-10-08T22:42:26.540 回答
0
在方法结束之前,您无法确定字符串是否连续,因此您无法true
在中间返回。false
当您发现该字符串不连续时,您最多可以返回。
为了提供更多建议,您所说的“连续”是什么意思?是adgkm
连续的吗?查看当前代码,它看起来像它;你检查的只是字符的顺序。是abcdcbcd
连续的吗?通常“连续”意味着没有间隙。
于 2013-10-08T22:43:54.463 回答
0
在 if 和 else 语句中都有 return 语句,因此该方法将在第一次检查后返回。您必须只为退出条件返回。不要同时给予 if 和 else
于 2013-10-08T22:48:44.253 回答