簡體   English   中英

查看單詞的字母是否按升序排列

[英]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);

}

用偽代碼:

  1. 取第一個字母(F)=>儲存它
  2. 取下一個字母(N)=>對照第一個=>如果不能,請在此處停止
  3. 還有另一個下一個字母=>如果沒有,在這里停止
  4. 用下一個字母(N)更新第一個字母(F)
  5. 從2開始重復

這里需要解決的問題很少:

  1. 您需要增加“ i”才能遍歷單詞。

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

  3. 當您發現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM