由于某种原因,我在代码的这一部分中有一些逻辑(java.lang.ArrayIndexOutOfBoundsException)错误。我希望用户输入任何内容并将其拆分并解析为整数。如果用户没有这样做,请再次询问他们。如果他们输入类似“g5 3 76h 23”的东西,那么程序会接受它为5 3.或者如果我可以让程序拒绝这个,直到用户只输入0到9之间用空格分隔的两个数字,那就没问题了以及。用户还可以选择退出“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
答案 0 :(得分:3)
您需要验证返回的token[]
数组的长度,因为可能不会返回“标记”。 I.E.,在没有首先确保它们存在的情况下,您不应该尝试访问token[0]
和token[1]
。
示例检查:
if(token.length > 1)
答案 1 :(得分:1)
从扫描仪文档:
扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。
您可以将其更改为:
scan.useDelimiter(del); // If you want to split on more than just whitespace
while(scan.hasNext()) {
String input = scan.next();
if("q".equals(input)) {
System.out.println("Thank you for playing");
return;
}
// etc. Put in a list or array for use later.
}
请记住,字符串是对象,因此如果两个字符串都是同一个对象,==
只返回true,而不是它们具有相同的值。使用.equals
进行值比较。