0

如何使用 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;
     }
}
4

1 回答 1

0

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

然后解析每一行并获取字符串。

虽然我没有添加 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;
   }
 }
于 2017-08-26T22:01:12.037 回答