【问题标题】:How to find sum of digits inside InputStream in Java如何在Java中找到InputStream中的数字总和
【发布时间】:2021-08-14 12:31:03
【问题描述】:

我已经有了这个任务的解决方案,这段代码通过了测试。但我不明白。

而我don't have其他部分的代码,只有这个方法。我应该完成它并通过测试。

我没有的测试代码。

解决办法:

public static int getSum(InputStream is)  {
    int sum = 0;
    try {
        int digit = is.read();
        while (digit != -1) {
            sum += digit;
        }

    }catch (Exception e){
        e.printStackTrace();
    }
    return sum;
}

例如,如果 InputStream 包含 1,2,10,那么 sum 将为 13。

但是程序如何找到 13 If is.read() 方法返回输入数字的字节表示而不是某些数字?

应该是 49 + 50 + (10 的字节表示是什么?) = 大于 13

【问题讨论】:

  • 具体取决于您的流中包含的内容。
  • 在输入流周围包裹一个DataInputStream 并使用readInt 直接从中读取整数。
  • @JohannesH。这假设有人以二进制补码和大端序将整数写入流。
  • @Boris 如果不是这样,所提出的解决方案也将不起作用。
  • 所以它只是每 8 位读取一次流,而不是您想象的每一个数字,它是二进制的,而不是十进制的

标签: java inputstream


【解决方案1】:

如果读取的数字以 Java 使用的相同二进制格式(二进制补码、大端序)存在于输入流中,则将它们读入 int 将按预期工作。

但是,由于只有一个字节被读入 4byte java int,因此解决方案仅适用于碰巧在 32 位二进制补码表示中除最后 8 位以外的所有位都设置为零的数字 - 这是从 0 开始的正数到 127。

【讨论】:

  • 只会读取一个无符号字节。如果有人写了更广泛的东西,那将行不通。 int 具有误导性。
  • 您能否举一些例子,我如何将二进制格式的数字传递到 InputStream 中?
  • 同意。但据我们所知,代码是有效的,所以流内容必须是这样的。
  • @AlexanderTukanov 例如将它们传递给OutputStream.write()
  • 好的,我现在明白你的意思了。然而,这意味着解决方案不可能像预期的那样工作,不仅仅是在几个边缘情况下,除了正在发送的数字的最后一个字节之外的所有位都是零。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-13
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
相关资源
最近更新 更多