0

私のプログラムは思いどおりに動作しますが、質問を空白のままにするか、[OK] をクリックすると、出力にこれらすべてのエラーが赤色で表示されます。どうすれば修正できるのかと思っていたので、何も入力しないとnullまたは空の文字列が返されるはずです。私が持っている次のプログラムはそれを台無しにしていると思いますが、プログラムを機能させるにはこのデータが必要です。nullまたは空の文字列を確実に取得できるようにするために欠けているものはありますか?

ありがとう!

input = JOptionPane.showInputDialog(null, "Ask any question (Remember to type the ?):");
i = input.length() - 1;
lastletter = input.charAt(i);
4

4 に答える 4

4

何も入力されていない場合は、 をinput.length()返します0。次に0-1、 を取得して取得しiます-1-1次に、空の入力でインデックスの文字を取得しようとしています。最後の文字を取得する前に、input.length()等しいかどうかを確認する必要があります。0

于 2012-10-13T21:54:08.887 に答える
2

何も入力しないと にinputなり""ます。その結果、 は にinput.length() - 1評価され-1、 を呼び出していることを意味しますinput.charAt(-1)。これにより aStringIndexOutOfBoundsExceptionがスローされ、「赤いエラー」が発生します。

于 2012-10-13T21:54:44.990 に答える
1

文字列chatAt(index)は、指定されたインデックスにある任意の文字を返します。インデックスの範囲は、0 から文字列の長さから 1 を引いた値までです。string.lenght()-1そしてポジティブでなければなりません。この範囲外のインデックスは、 `IndexOutOfBoundsException を返します。

したがって、あなたの特定のケースでは、

i = input.length() - 1;
lastletter = input.charAt(i);

何も入力しないと、input.length() は 0 を返すため、i は -1 になります。Java の仕様では、charAt() の有効な範囲は 0 から input.length()-1 であり、input.length()-1 は正でなければならないため、コードはスローします。 IndexOutOfBoundsException

インデックス「i」が負であるかどうかを確認することで回避できます。例:

i = input.length() - 1;
if (!i<0){
   lastletter = input.charAt(i);
}

詳細については、 http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#charAt(int)を参照してください。

于 2012-10-13T22:01:55.847 に答える
1

この線

JOptionPane.showInputDialog(null, "Ask any question (Remember to type the ?):");

ユーザーがテキストを入力せずに [OK] をクリックすると、空の文字列 ("") が返されます。この文字列の長さはゼロであり、インデックス -1 の文字にアクセスしようとすると、indexOutOfBoundsException がスローされます。これは、入力の長さを確認することで簡単に修正できます。ただし、それを行う前に、入力が null に等しいかどうかを確認する必要があります。これは、ユーザーがキャンセルまたは右上の「x」を押した場合に返されるものであるためです。したがって、必要なチェックは次のとおりです。

if (input != null && input.length()  > 0){
   lastletter = input.charAt(input.length - 1);
}
于 2012-10-13T22:03:33.227 に答える