我已经有一段时间了,但正如标题所说,我试图创建一种方法,将每个字母与字母后面的字母进行比较,看看这个单词是否在提升。然后该方法应返回一个布尔值。但是当它在我的代码中实现时,它将失败:
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);
}
我无法看到我出错的地方?
答案 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)
在伪代码中:
答案 3 :(得分:0)
这里很少有事情需要解决:
您需要增加“i”来遍历单词。
将while循环限制为(i < word.length() )
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;
}