0

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

我知道这可以很容易地通过扫描仪完成,但我不想使用它,因为它会引发在线评审员的TLE(时间限制延长)错误。

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; 
    } 
} 

回答

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; 
    } 
} 
相关问题