-1

这就是我到目前为止所拥有的,我花了几个小时的工作才到达这里。我的代码的问题是,如果我给它一个字符串“abcefg”,它将验证前两个字符并将其返回为真。我希望代码为我的所有角色都这样做。我认为将限制设置为 x.length() 可以做到这一点,但由于某种原因,它不起作用。

4

5 回答 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 回答