查看单词的字母是否按升序排列

时间:2013-10-23 19:49:15

标签: java methods word

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

  

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

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

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);
}

我无法看到我出错的地方?

5 个答案:

答案 0 :(得分: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);
 }

答案 1 :(得分:0)

我不会使用do,因为有机会在空字符串上运行它会导致崩溃。我会改为使用常规的while和开始测试while(i&lt; word.length() - 1)。你永远不想测试超过字符串的结尾。你总是想检查一下字符串长度为n的charAt(n-1)&lt;的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);

}

答案 2 :(得分:0)

在伪代码中:

  1. 取第一个字母(F)=&gt;存储它
  2. 取下一个字母(N)=&gt;检查第一个=&gt;如果不行就停在这里
  3. 还有另一个下一个字母=&gt;如果没有就停在这里
  4. 用下一个字母(N)更新第一个字母(F)
  5. 从2开始重复

答案 3 :(得分:0)

这里很少有事情需要解决:

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

  2. 将while循环限制为(i < word.length() )

  3. 当您发现break为假时,您可以随时ascend。无需继续循环。

答案 4 :(得分: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;
}