Метод write(int) в типе BufferedWriter неприменим для аргументов (Long)

Я получаю вышеуказанную ошибку, когда пытаюсь это сделать

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

Вхождения и singleValues ​​определяются здесь:

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

Есть ли способ обойти это?


person user2007843    schedule 10.04.2013    source источник
comment
Ну, мы ничего не знаем о uaCount, что не помогает. Чего вы пытаетесь достичь?   -  person Jon Skeet    schedule 10.04.2013
comment
Вам нужно определить, какой результат вы ожидаете...   -  person Jon Skeet    schedule 10.04.2013
comment
uaCount — это моя хэш-карта, я просто пытаюсь распечатать singleValues построчно, я бы добавил out.newLine(); после оператора out.write   -  person user2007843    schedule 10.04.2013
comment
BufferedWriter.write(int i) пишет i интерпретируется как символ. Не пишет номер i. См. docs.oracle.com/ javase/7/docs/api/java/io/   -  person Eric Jablow    schedule 10.04.2013


Ответы (4)


Учитывая заголовок вопроса, я предполагаю, что вы просто хотите использовать 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));
}
person Jon Skeet    schedule 10.04.2013
comment

Изменение:

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

to

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

убрал бы ошибку. Конечно, тогда вы захотите избежать размещения каких-либо длинных или длинных значений в singleValues.

person gdt    schedule 10.04.2013

Из документации java.io.BufferedWriter:

Записывает текст в поток вывода символов, буферизуя символы, чтобы обеспечить эффективную запись отдельных символов, массивов и строк.

Long не является текстом, Jon Skeet предложил решение, преобразовать Long в String с помощью String.valuesOf().

person Aubin    schedule 10.04.2013

измените его на (int)(long)out.write(uaCount.get(args[1]).singleValues.get(i));. вам нужно преобразовать Long в целое число

person Miloš Lukačka    schedule 10.04.2013
comment
Зачем все это набирать, когда можно использовать Long#intValue - person Luiggi Mendoza; 10.04.2013
comment
И BufferedWriter обрабатывает int как символ, это не цель ОП. - person Aubin; 10.04.2013