使用BufferReader从User获取输入

时间:2015-11-13 04:31:01

标签: java inputstream bufferedreader println system.in

因此,当我运行程序的main方法时,它会打印出来:

Enter number of test cases: 
1
Enter string 1

Enter string 2
rat apple cat ear cat apple rat

出于某种原因,在我为String 1输入任何内容之前,它会打印Enter string 1 and Enter string 2。任何人都可以解释为什么会发生这种情况。我BufferReader设置的方式有问题吗?

代码:

public static void main(String[] args) throws IOException
        {    
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Enter number of test cases: ");
            int testcases = in.read();

            System.out.println("Enter string 1");
            String[] str1 = in.readLine().split(" ");

            System.out.println("\nEnter string 2");
            String[] str2 = in.readLine().split(" ");

            for(int i = 0; i < testcases; i++)
            {
                String result = lcss(str1, str2);
                System.out.println("\nLCSS: "+ result);
                System.out.println("\nLCSS Length = "+ result.length());
            }

        }

3 个答案:

答案 0 :(得分:0)

请使用以下内容。

 int testcases = Integer.valueOf(in.readLine());

详细了解BufferedReader.read()

答案 1 :(得分:0)

修改

  1. 获取测试用例的数量为整数

  2. 创建一个二维数组来存储测试用例。第一维包含每个测试用例和&amp;第二维在每个测试用例中保存单词列表的String []。

  3. 迭代“for循环”,直到获得每个测试用例字符串数组的总测试用例数,

  4. 示例代码:

    public static void main(String[] args) throws Exception
    {    
        Scanner in = new Scanner(System.in);
        System.out.println("Enter number of test cases: ");
        int testcases = in.nextInt();
        System.out.println("test cases:"+testcases);
    
        String[][] strs = new String[testcases][];
        for ( int i =0; i< testcases ; i++ ){
            System.out.println("Enter string:"+i);
            in = new Scanner(System.in);
            if (in.hasNext()) {
                String s = in.nextLine();
                System.out.println(s);
                strs[i] = s.split(" ");
                System.out.println("Length:"+strs[i].length);
            }
            System.out.println();
    
        }
    
        // Add your logic
    }
    

答案 2 :(得分:0)

int testcases = in.read();没有读取换行符(当您按Enter键时)。

readLine()中的String[] str1 = in.readLine().split(" ");现在将在您输入的号码后直接读取,并搜索下一个换行符。现在可以找到输入数字的换行符,直接返回函数而不等待输入。

关于导致程序行为方式的原因的解释非常多。

现在您还有另一个错误,因为BufferedReader.read()没有做您认为的事情。查看documentation

因此,当您输入1时,您的testcases变量将包含字符'1'的UTF-16值,即31。

正如其他答案已经指出的那样,您应该使用Integer.valueOf(in.readLine());来获取testcases的值或使用Scanner