0

私はしばらくこれに取り組んできましたが、タイトルが示すように、各文字をその後の文字と比較し、単語が昇順であるかどうかを確認するメソッドを作成しようとしています. メソッドはブール値を返す必要があります。しかし、コードに実装すると、次のように失敗します。

java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.charAt (Unknown Source)

およびその他の複数行のエラー コード。ここに私のソースコードがあります:

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. が falseであるbreakことがわかった時点で、いつでも可能性があります。ascendループを続行する必要はありません。
于 2013-10-23T20:02:47.840 に答える
0

状態であるべき

i < word.length()-1

i = 0;最後に はループの内側にある必要がありますi++。そうでない場合は、無限ループになります。

また、実際にリバースチェックを入れています。修正すると、昇順の文字列ArrayIndexOutOfBoundsExceptionに戻ります。falsetrue

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

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 に答える
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

擬似コード:

  1. 最初の文字 (F) を取る => 保存する
  2. 次の文字を取る (N) => 最初の文字と照合する => OK でない場合はここで終了
  3. 別の次の文字がありますか => ない場合はここで終了
  4. 最初の文字 (F) を次の文字 (N) で更新
  5. 2から繰り返す
于 2013-10-23T19:58:28.547 に答える