何らかの理由で、コードのこの部分にロジック (java.lang.ArrayIndexOutOfBoundsException) エラーがあります。ユーザーに何かを入力してもらい、それを分割して整数に解析してもらいたいです。ユーザーがそうしなかった場合は、もう一度尋ねます。そして、彼らが「g5 3 76h 23」のようなものを入力した場合、プログラムはそれを 5 3 として受け入れます。または、ユーザーがスペースで区切られた 0 から 9 までの 2 つの数字のみを入力するまでプログラムにこれを拒否させることができれば、それで問題ありません。同じように。ユーザーは、「q」を入力して終了するオプションもあります。ただし、実行するたびに、何も新しい配列に分割されていないように見えます。エラーが発生します。
/**
* Prompts the user for input
*/
public void promptUser() {
// a Scanner object that uses System.in for input.
Scanner scan = new Scanner(System.in);
// a prompt for the user, asking them for input.
System.out.print("Pick a coordinate [row col] or press [q] to quit: ");
// Get input from the user, checking for errors. If the input is
// correct (e.g., two numbers that in bounds and have not
// already been clicked), then call the click method for desired
// coordinates. If the user wants to quit the game then make sure
// to update the boolean state variable and print out a message.
String input = scan.next();
String del = "[\\s,;\\n\\t]+"; // these are my delimiters
String[] token = input.split(del); // here i will save tokens
int val0 = 11, val1 = 11;
boolean tf = true;
while(tf)
{
if(token[0] == "q")
{
isRunning = false;
System.out.println("Thank you for playing");
}
else
{
try
{
val0 = Integer.parseInt(token[0], 10);
}
catch (NumberFormatException nfe)
{
// invalid data - set to impossible
val0 = 11;
}
try
{
val1 = Integer.parseInt(token[1], 10);
}
catch (NumberFormatException nfe)
{
// invalid data - set to impossible
val1 = 11;
}
}
if( !(((val0 >= 0) && (val0 < rows)) && ((val1 >= 0) && (val1 < cols))) )
{
System.out.println("Input Invalid, pick a coordinate [row col] or press [q] to quit: ");
input = scan.next();
for(int i=0;i<2;i++)
{
token = input.split(del);
}
}
else if(false) //atm
{
}
else
{
tf = false;
}
click(val0, val1);
} //while loop
} // promptUser