[英]View if a word's letters are in ascending order
我已經有一段時間了,但是正如標題所說,我正在嘗試創建一種方法,將每個字母與后面的字母進行比較,以查看單詞是否升序。 然后,該方法應返回一個布爾值。 但是,當在我的代碼中實現它時,它將失敗並顯示:
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);
}
我看不到我要去哪里錯了?
條件應該是
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);
}
我不會使用do,因為有機會在空字符串上運行它,導致崩潰。 我會改用常規的while並在開始時測試while(i <word.length()-1)。 您永遠都不想在字符串末尾進行測試。 您總是想檢查一下charAt(n-1)<charAt(n)的字符串長度是否為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);
}
用偽代碼:
這里需要解決的問題很少:
您需要增加“ i”才能遍歷單詞。
限制你的while循環直到(i < word.length() )
ascend
為假時,您可能會隨時break
。 無需繼續循環。 不要使用do-while循環。 即使您這樣做,也需要事先進行一些檢查,以確保您的單詞長度大於1,否則您的代碼將引發IndexOutOfBounds異常。 如果您堅持使用它,請將條件更改為
這是一個工作代碼示例:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.