0

我已经有一段时间了,但正如标题所说,我正在尝试创建一种方法,将每个字母与其后面的字母进行比较,看看这个词是否在升序。然后该方法应返回一个布尔值。但是当它在我的代码中实现时,它将失败:

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:
java.lang.String.charAt 处的 1(未知来源)

和其他多行错误代码。这是我的源代码:

public static boolean ascending(String word){
  int i = 0;
  boolean ascend;
  do {
   if (word.charAt(i) <= word.charAt(i+1))
     ascend = false;
   else
     ascend = true;
  } while (i <= word.length());
  i = 0;
  return (ascend);
}

我看不出哪里出错了?

4

5 回答 5

0

这里有几件事需要解决:

  1. 您需要增加“i”才能遍历单词。

  2. 限制你的while循环直到(i < word.length() )

  3. 你可以break在任何时候发现ascend是假的。无需继续循环。
于 2013-10-23T20:02:47.840 回答
0

我不会使用 do while 因为有机会在一个空字符串上运行它导致它崩溃。我会改为使用常规的 while 并在开始时测试 while (i < word.length()-1)。你永远不想测试超过字符串的结尾。您总是想检查字符串长度是否为 n,即 charAt(n-1) < charAt(n)。我也没有看到一个增量器来增加 i 的值。循环永远不会继续到下一个字母,并将永远运行。

public static boolean ascending(String word){
int i = 0;
boolean ascend;
while (i < word.length()-1)
{
if (word.charAt(i) <= word.charAt(i+1))
ascend = false;
else
ascend = true;
i++;
}
i = 0;
return (ascend);

}
于 2013-10-23T19:56:45.067 回答
0

条件应该是

i < word.length()-1

最后i = 0;的 应该在循环旁边i++,否则它将是无限循环。

另外,您实际上已经进行了反向检查。修复后ArrayIndexOutOfBoundsException,您将返回false升序字符串,true否则

public static boolean ascending(String word){
    if(word == null || word.length <2) return false;
    int i = 0;
    boolean ascend = false;
    while(i < word.length()-1){
        if (word.charAt(i) <= word.charAt(i+1))
            ascend = true;
        else{
            ascend = false;
            break;
        }
        i++;
    }    
    return (ascend);
 }
于 2013-10-23T19:54:53.490 回答
0

在伪代码中:

  1. 取第一个字母 (F) => 存储它
  2. 取下一个字母(N)=>检查第一个=>如果不行就停在这里
  3. 是否还有下一个字母 => 如果没有,请停在这里
  4. 用下一个字母 (N) 更新第一个字母 (F)
  5. 从2开始重复
于 2013-10-23T19:58:28.547 回答
0

不要使用 do-while 循环。即使您需要事先运行一些检查以确保您的单词长度大于 1,否则您的代码将引发 IndexOutOfBounds 异常。如果您坚持使用它,请将您的条件更改为 i

这是一个工作代码示例:

public boolean isAscending(String word){
    if (word==null || word.length==0){
        return false;
    }
    for (int i=1; i<word.length(); i++){
        if (word.charAt(i) < word.charAt(i-1))
            return false;
    }

    return true;
}
于 2013-10-23T20:12:49.880 回答