【问题标题】:Java: Calculate sum of continuously printed numbers from InputStreamReader every n seconds?Java:每隔 n 秒计算 InputStreamReader 连续打印的数字的总和?
【发布时间】:2016-10-10 14:43:25
【问题描述】:

我正在使用 InputStreamReader 从 shell 终端检索值,该终端在运行时不断产生输出。

现在,我正在使用子字符串将结果打印到控制台:System.out.println(inputStr.substring(inputStr.lastIndexOf(" ")+1));,因为它将打印我需要的输出的最后一位。

如果输出连续运行,可能每秒打印 1 次,我如何编写 Java 代码来每 N 秒对所有打印的数字求和?(假设 20 秒为好衡量标准)?

这是目前为止的源代码:

import java.io.InputStreamReader;
import java.io.BufferedReader;

public class fooShell {

    public static void main(String[] args) {

        InputStreamReader isReader = new InputStreamReader(System.in);
        BufferedReader bufReader = new BufferedReader(isReader);
        while(true){
            try {
                String inputStr = bufReader.readLine();
                if(inputStr == null) {
                    break;
                }
                    System.out.println(inputStr.substring(inputStr.lastIndexOf(" ")+1));     
            }
            catch (Exception e) {
                System.err.println("Error "+e);
            }
        }
   }

}

【问题讨论】:

    标签: java string inputstream bufferedreader


    【解决方案1】:

    将不断更新的总和存储为类变量,并在每次轮询 InputStreamReader 时对其进行更新。

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    
    public class FooShell
    {
      int runningTotal;
    
      FooShell()
      {
        runningTotal = 0;
      }
    
      public static void main(String[] args)
      {
    
        FooShell fooShell = new FooShell();
        InputStreamReader isReader = new InputStreamReader(System.in);
        BufferedReader bufReader = new BufferedReader(isReader);
        while (true)
        {
          try
          {
            String inputStr = bufReader.readLine();
            if (inputStr == null)
            {
              break;
            }
            int currentNumber = Integer
                .parseInt(inputStr.substring(inputStr.lastIndexOf(" ") + 1));
            fooShell.runningTotal += currentNumber;
            System.out.println(currentNumber);
          }
          catch (Exception e)
          {
            System.err.println("Error " + e);
          }
        }
      }
    }
    

    【讨论】:

    • 你会在主目录里放这个吗?另外,如何让它每 N 秒打印一次总和?我也没有看到你使用过“MyClass”值?
    • 不知道你的代码是什么样的,很难给你更多的方向。无论您的代码当前在哪里将结果打印到控制台,都只需要更新一个 sum 变量。 MyClass 是一个通用类名,不是要使用的值。
    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    相关资源
    最近更新 更多