BufferedWriter类型中的方法write(int)不适用于参数(Long)

时间:2013-04-10 19:43:45

标签: java long-integer bufferedwriter

我在尝试此操作时遇到上述错误

for (int i = 0 ; i < uaCount.get(args[1]).occurrences ; i++)
    {
        out.write(uaCount.get(args[1]).singleValues.get(i));
    }

此处定义了出现次数和单值:

public static class NumberHolder
{
    public int occurrences = 0;
    public int sumtime_in_milliseconds = 0; 
    public ArrayList<Long> singleValues = new ArrayList<Long>();
}

有什么方法可以解决这个问题吗?

4 个答案:

答案 0 :(得分:5)

鉴于问题的标题,我的 guess 就是你只想使用String.valueOf创建一个字符串:

for (int i = 0 ; i < uaCount.get(args[1]).occurrences ; i++)
{
    out.write(String.valueOf(uaCount.get(args[1]).singleValues.get(i)));
}

请注意,值之间不会有任何分隔符。我还建议,为了便于阅读,你会写一些类似的东西:

NumberHolder holder = uaCount.get(args[1]);
for (int i = 0; i < holder.occurrences; i++)
{
    long value = holder.singleValues.get(i);
    out.write(String.valueOf(value));
    // Maybe out.write(" ") or something similar, as a separator?
}

此外,我强烈建议您不要像现在一样使用公共字段。尝试更仔细地封装您的类型。如果occurrences实际上是列表的大小,则可以使用增强的for循环来简化操作。例如:

for (long value : uaCount.get(args[1]).getSingleValues()) {
    out.write(String.valueOf(value));
}

答案 1 :(得分:0)

更改:

public ArrayList<Long> singleValues = new ArrayList<Long>();

public ArrayList<Integer> singleValues = new ArrayList<Integer>();

会删除错误。当然,您将希望避免在singleValues中放置任何long或Long值。

答案 2 :(得分:0)

来自documentation of java.io.BufferedWriter

  

将文本写入字符输出流,缓冲字符   提供单个字符,数组和   字符串。

Long不是文字,Jon Skeet已提出解决方案,将Long转换为字符串String.valuesOf()

答案 3 :(得分:-2)

将其更改为 (int)(long)out.write(uaCount.get(args[1]).singleValues.get(i));。 你必须将Long强制转换为整数