我正试图从用户那里获取3个字符串。
我目前遇到的问题是扫描仪永远不会结束/从不存储第一个用户输入值?由于迄今为止我所做的研究数量有限,扫描仪方法似乎有一些复杂性远远超出了封面。
我的当前代码如下,然后是完整方法。任何形式的解释都将受到高度赞赏。谢谢!
与问题有关的代码:
//prompt user for array values by row
System.out.println("Enter matrix values by row: ");
userInput[0] = in.nextLine();
userInput[1] = in.nextLine();
userInput[2] = in.nextLine();
完整方法:
public static double[][] setArray()
{
//initiate variables
String stringValue = "";
double doubleValue = 0;
//instantiate string array for user input values
String[] userInput = new String[3];
//instantiate return array
double[][] array = new double[3][4];
//prompt user for array values by row
System.out.println("Enter matrix values by row: ");
userInput[0] = in.nextLine();
userInput[1] = in.nextLine();
userInput[2] = in.nextLine();
//stop each scanner
int valueCounter = 0;
for(int eachString = 0; eachString < 3; eachString++)
{
for(int index = 0; index < userInput[eachString].length(); index++)
{
//exception handling
//if string does not contain a space, period, or valid digit
while(userInput[eachString].charAt(index) != ' '
&& userInput[eachString].charAt(index) < '0'
&& userInput[eachString].charAt(index) > '9'
&& userInput[eachString].charAt(index) != '.')
{
System.out.println("Invalid input. Digits must be in integer"
+ " or double form. (i.e. 4 5.0 2.3 9)");
System.out.println("Re-enter given matrix value");
userInput[eachString] = in.nextLine();
}
}
//given string is valid at this point//
//for each index in string value
for(int eachIndex = 0; eachIndex < userInput[eachString].length(); eachIndex++)
{
//while value != ' '... += string... if value == ' ' stop loop
while(userInput[eachString].charAt(eachIndex) != ' ')
{
stringValue += userInput[eachString].charAt(eachIndex);
}
doubleValue = Double.valueOf(stringValue);
array[eachString][valueCounter] = doubleValue;
valueCounter++;//array[0-2][0-3 (valueCounter)]
stringValue = "";//clear string
}
}
return array;
}
答案 0 :(得分:0)
您只想将扫描仪分解为一次读取1个数字,然后询问第二个数字,然后将其读入,然后询问第三个数字。
或者你可以让他们提供3个数字除以空格或其他东西,然后将其作为字符串读取,并按每个空格拆分字符串并解析为每个userInput。
我会这样,后者看起来像这样:
System.out.println("Enter matrix values by row: ");
String temp = in.nextLine();
String[] tempArray = temp.split("\\s+");
userInput[0] = tempArray[0];
userInput[1] = tempArray[1];
userInput[2] = tempArray[2];
显然需要进行错误检查。但这应该适合你。