当前位置: 首页 > 知识库问答 >
问题:

使用BufferedReader交替输入不同类型的变量时出现问题

苏高旻
2023-03-14

我试图了解System.in input在Java是如何工作的,我创建了一些输入输出代码。我的目标是显示输入到控制台的所有内容,即使输入中有不同类型的变量(例如String、int)交替出现。当我逐行输入数据,并在每行后按Enter键-输出是正确的。但是,如果我将整个输入复制粘贴到控制台,那么在最后一个for循环的第一次迭代之后,代码就会停止,并等待enter。我该怎么做才能使它在没有输入的情况下工作?

下面是使用BufferedReader+解析字符串的代码(我也尝试过使用Scanner,但结果相同)。

public static void main(String [] args) throws IOException{     
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
        String inString;

        inString = input.readLine();
        int test = Integer.parseInt(inString);
        System.out.println(test);
        for (int t=0; t<test; t++){                                     
            inString = input.readLine();
            int cities = Integer.parseInt(inString);
            HashMap<String, Integer> cityMap = new HashMap<>();
            System.out.println(cities);
            for (int c=1; c<=cities; c++){                              
                inString = input.readLine();
                System.out.println(inString);
                cityMap.put(inString, c);                                   
                inString = input.readLine();
                int connections = Integer.parseInt(inString);
                System.out.println(connections);
                for (int i=0; i<connections; i++){
                    inString = input.readLine();
                    String [] parts = inString.split("\\s+");
                    System.out.print(Integer.parseInt(parts[0]) + " ");
                    System.out.print(Integer.parseInt(parts[1]) + "\n");
                }
            }
            inString = input.readLine();
            int routes = Integer.parseInt(inString);
            System.out.println(routes);
            for (int i=0; i<routes; i++){
                inString = input.readLine();
                String [] parts = inString.split("\\s+");
                System.out.println(parts[0] + " " + parts[1]);
            }
        }
}

我尝试的输入是:

1
4
london
2
2 1
3 3
berlin
3
1 1
3 1
4 4
paris
3
1 3
2 1
4 1
prague
2
2 4
3 1
2
london prague
berlin prague

最后一行只有在我按Enter键后才会显示。

共有1个答案

呼延博易
2023-03-14

使您的文本像行\n行。我的意思是,在您粘贴到控制台的每一行后面,放一个\n:)

 类似资料:
  • 最近我做了一个关于现代c的研究。我看到一个视频[在49:00]关于c 11/c 14变量模板。如果你想用不同的模板计算不同类型元组的总和(如,),使用c 11,视频建议一个解决方案: 无法在中推断返回类型,因此必须使用声明返回类型。但有些编译器生成失败,有些编译器生成成功。链接 虽然,使用没有问题,我的问题是: 标准是否涵盖了这个问题?如果没有,编译器是否通过自己的实现来处理这个问题? 为什么最新

  • 我有一行代码: 它接受一个变量,其类型应为float。当我使用type()测试变量类型时,它返回: 但是我一直收到一个错误,上面写着“/: str和int不支持的操作数类型”。

  • 我想采取两个字符串和交替的字符到一个新的字符串使用for方法。 例如:“两个”和“一个” 结果:“townoe” 这就是我到目前为止所拥有的,我真的不知道如何完成它。

  • 想象一下下面的scanario:我有一个程序,它要求输入一个整数,然后是一个String输入。 根据aobe代码,我没有机会输入姓名。因此,通常我会声明2个扫描仪对象,如下所示: 我的问题是:有必要声明多个扫描仪对象来接受不同类型的输入吗??我这样做是正确的吗? 我已经考虑这个问题很多年了。(SO中的几个问题提到了多扫描仪,但他们的问题只使用了一个扫描仪对象,所以我今天问这个问题。)

  • 有人问我一个关于求两个数之间的公约数的问题。我能够使用“埃拉托色尼筛”找出逻辑方法,我正在运行我的代码。但是我的代码给出了一个意想不到的输出,它能够计算出no。指两个数之间的公约数。对于第一个输入,但对于其余的输入,它以某种方式继续与前一个值“内部循环j”,在该值处,它在第一个测试用例中停止;对于其他测试用例。 逻辑方法-->如果一个素数不。是给定两个NO的因子。然后,我们将检查每一个素数的倍数。

  • 我使用HTML5验证字段。我提交的表单使用JavaScript点击按钮。但是HTML5验证不起作用。它只在输入类型为时才起作用。除了使用JavaScript验证或将类型更改为提交之外,我们还能做什么吗? 这是超文本标记语言代码: 我正在函数中提交表单。