【问题标题】:How to take space separated input in Java using BufferedReader?如何使用 BufferedReader 在 Java 中获取空格分隔的输入?
【发布时间】:2017-08-26 21:22:00
【问题描述】:

如何使用 BufferedReader 在 Java 中获取空格分隔的输入? 请相应地更改代码,我希望 a、b、n 的值作为空格分隔的整数,然后我想在每个测试用例之后按 Enter。 这意味着首先我将输入测试用例的数量,然后按 Enter 键。然后我输入 a 的值,然后按空格键,b 然后按空格键,然后我将输入 n 的值,然后按 Enter 键输入下一个测试用例。

我知道这可以通过 Scanner 轻松完成,但我不想使用它,因为它会向在线评委抛出 TLE(Time Limit Extended) 错误。

public static void main(String[] args) throws IOException {
    try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String inputString = br.readLine();
            int testCases = Integer.parseInt(inputString);
            double a,b,n,j,t=1;
            int i;
            int ans [] = new int[testCases];
            for(i=0;i<testCases;i++)
            {
                inputString = br.readLine();
                a = Double.parseDouble(inputString);
                inputString = br.readLine();
                b = Double.parseDouble(inputString);
                inputString = br.readLine();
                n = Double.parseDouble(inputString);
                for(j=0;j<n;j++)
                {
                    if(t==1)
                    {
                        a*=2;
                        t=0;
                    }
                else if(t==0)
                {
                    b*=2;
                    t=1;
                }
            }
            if(a>b)
                ans[i]=(int)(a/b);
            else
                ans[i]=(int)(b/a);
            t=1;
        }
        for(i=0;i<testCases;i++)
            System.out.println(ans[i]);
    }catch(Exception e)
     {
        return;
     }
}

【问题讨论】:

    标签: java java.util.scanner whitespace bufferedreader time-limiting


    【解决方案1】:

    先读取要读取的输入行数。

    然后解析每一行,得到字符串。

    虽然我没有添加 NumberFormatException 处理,但拥有它是个好主意。

    像这样改变你的 for 循环:

    for(i=0;i<testCases;i++){
    
        inputString = br.readLine();
        String input[] = inputString.split("\\s+");
        a = Double.parseDouble(input[0]);
        inputString = br.readLine();
        b = Double.parseDouble(input[1]);
        inputString = br.readLine();
        n = Double.parseDouble(input[2]);
        for(j=0;j<n;j++){
           if(t==1){
              a*=2;
              t=0;
           }else if(t==0){
               b*=2;
               t=1;
           }
       }
       if(a>b){
         ans[i]=(int)(a/b);
       }else{
          ans[i]=(int)(b/a);
          t=1;
       }
     }
    

    【讨论】:

      猜你喜欢
      • 2015-08-17
      • 2014-08-31
      • 2015-03-08
      • 2011-11-30
      • 2015-03-17
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多