如何停止扫描仪?

时间:2016-04-15 00:30:11

标签: java java.util.scanner

我正试图从用户那里获取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;
}

1 个答案:

答案 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];

显然需要进行错误检查。但这应该适合你。