我在尝试此操作时遇到上述错误
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>();
}
有什么方法可以解决这个问题吗?
答案 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强制转换为整数