首页 文章

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

提问于
浏览
1

我尝试这个时遇到上述错误

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

    鉴于问题的 Headers ,我的猜测是你只想使用 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));
    }
    
  • -2

    更改:

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

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

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

  • 5

    来自documentation of java.io.BufferedWriter

    将文本写入字符输出流,缓冲字符,以便有效地写入单个字符,数组和字符串 .

    Long不是文本,Jon Skeet已经提出了解决方案,用String.valuesOf()将Long转换为String .

  • 0

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

相关问题