0

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

Enter number of test cases: 
1
Enter string 1

Enter string 2
rat apple cat ear cat apple rat

出于某种原因,它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());
            }

        }
4

3 回答 3

0

请使用以下内容。

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

阅读更多关于BufferedReader.read()

于 2015-11-13T05:24:33.190 回答
0

编辑:

  1. 以整数形式获取测试用例的数量

  2. 创建一个二维数组来存储测试用例。第一个维度包含每个测试用例,第二个维度包含每个测试用例中单词列表的 String[]。

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

示例代码:

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
}
于 2015-11-13T06:09:58.687 回答
0

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

现在readLine(),行中的 inString[] str1 = in.readLine().split(" ");将在您输入的数字之后直接开始读取并搜索下一个换行符。现在找到了您输入数字的换行符,该函数直接返回,无需等待您的输入。

关于是什么原因导致您的程序以它的方式运行的解释就这么多。

现在你确实有另一个错误,因为BufferedReader.read()它没有按照你的想法做。检查文档

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

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

于 2015-11-13T06:26:33.230 回答