これはtic tac toeプログラムのaccept関数です。したがって、s
は、データをString形式で、0,0または2,2の間にのみ格納します。 p
に値を格納しようとしたときCharacter.getNumericValueを使用しているときのStringIndexOutOfBoundsException
、私は今、それぞれp
とq
に数値を格納するためにgetNumericValue
機能を使用していますが、実行時に、私はStringIndexOutOfBounds
例外を取得します。
問題は、そうでなければ罰金を実行している)、xまたはO を決定する選択肢()関数は前に(受け入れ呼ばれたときにのみ起こっています。 choice()関数の問題は何ですか?
void accept()throws IOException
{
System.out.println("Your move:");
String s=xy.readLine();
int p = (Character.getNumericValue(s.charAt(0)))-1;
int q = Character.getNumericValue(s.charAt(2))-1;
if(ar[p][q]==0)
ar[p][q]=1;
else
{
System.out.println("You can't capture a location that has already been captured!");
accept();
}
}
void choice() throws IOException
{
System.out.println("Welcome to tictactoe");
System.out.print("Enter your weapon X or O : ");
chp = Character.toUpperCase((char)xy.read());
if (chp=='X')
chc='O';
else
chc = 'X';
System.out.println("kkbot chose: "+ chc);
}
[ 'String.charAt'のドキュメント](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#charAt(int)を読みます)。渡すインデックスが> = Stringの場合、 'StringIndexOutOfBoundsException'が返されます。言い換えれば、 's'は2文字未満であり、' 2'は無効なインデックスになります。 – qxz
入力形式とは何ですか? –
@ShyamBaitmangalkar String正しい形式で正しい入力を行った後でも、sは何らかの理由で常に空文字列を格納し、Character.getNumericValueは-1を返します。 –